¿Cómo verifica un contrato en etherscan que está implementado por otro contrato?

¿Cómo se verifica correctamente un contrato en etherscan implementado por otro contacto?

Implementé un contrato que implementa otros contratos en la cadena de bloques.

El contrato original está verificado, sin embargo, cuando ese contrato implementa el contrato en la cadena de bloques, no puedo verificar el contrato.

¿Alguien puede ayudarme con esto?

Respuestas (5)

No es posible a partir del 24 de marzo de 2018. Etherscan no puede ubicar el código de contrato en la dirección del subcontrato.

Aquí está la transacción que implementa dos contratos. Pero para el segundo contrato, etherscan no puede encontrar el código de contrato.

El segundo contrato existe y esto se verificó mediante el uso de la función "en la dirección" de la remezcla. Hasta que haya algunas actualizaciones de etherscan, no es posible verificar el contrato creado por otro contrato.

Febrero de 2019, todavía no es posible.
Rinkeby 4 de marzo de 2019. Todavía no es posible
Posible antes del 1 de octubre de 2020. Cualquiera que tenga el mismo problema, consulte mi respuesta a continuación.

He implementado un contrato de otro contrato: https://etherscan.io/tx/0x8fd885ce7ad7b6a591d9614d41cbb1d97aa7d2e290f6aa52531ce3d4c799a5ff

que implementó: https://etherscan.io/address/0xb1400278014f34c8243b15613a4b463b51fb6f2a#code

y pude verificar el contrato usando la misma versión y optimización del compilador. Sin embargo, debe codificar todos los argumentos del constructor usted mismo, utilizando web3.eth.abi.encodeParameters

así fue como pude verificarlo en etherscan.

Parece que etherscan le permite verificar los contratos implementados por contratos siempre que los parámetros del constructor no tengan una longitud dinámica ( string, bytes, uint[]).
Según la respuesta más votada, puede haber más condiciones en las que etherscan falle.
¿Puede mostrar, cómo implementaría eso, y después de 4 años hay alguna forma nueva?

Si es un usuario de Hardhat, puede usar el complemento hardhat-etherscan :

$ yarn hardhat --network NETWORK_NAME verify CONTRACT_ADDRESS --param1 --param2

Funciona incluso con contratos implementados por otros contratos porque usa el formato de entrada json estándar. Puede leer más sobre cómo funciona esta característica del compilador de Solidity en los documentos .

Nunca he implementado un contrato secundario , pero me imagino que podría ingresar el código fuente de su "otro" contrato en Solidity para recuperar el ABInecesario para Etherscan.

Desde la pestaña Compilar:

  1. Hacer clicDetails
  2. Desplácese hacia abajo paraInterface (ABI)
  3. Haga clic en el iconoCopy value to clipboard

Ha declarado que ya ha verificado el contrato "original" , por lo que supongo que está de acuerdo con el resto de los pasos en Etherscan.

No estoy seguro de dónde conectaría el ABI en etherscan.io/verifyContract. El ABI que solicita está en formato de código de bytes según los documentos, el ABI que proporciona el navegador solidity no está en código de bytes, sino algo que se parece a JSON. Este es el contrato real que estoy tratando de verificar... etherscan.io/address/… Las entradas reales pasadas al contrato implementado como argumentos del constructor fueron los siguientes parámetros 1000000,0,MARIA CANJE,CANJE,0xfDDEdAaa4a86B0B68Fd85D77E8399D0Fe8264289

Es posible antes del 1 de octubre de 2020. Solo tiene que especificar la versión correcta del compilador. Si implementó su contrato con Truffle, entonces su versión del compilador será la versión del paquete "solc" utilizada para compilar su código de contrato.

Por defecto, el paquete "solc" establece "optizaciones" en "Sí"

Entonces, cuando verifique su contrato, "Optimización" debe seleccionarse como "Sí"

Aquí está el código de contrato y subcontrato de muestra verificado en la red kovan.

Espero que esto ayude.