Cuando implemento un contrato con Truffle que tiene una import
declaración e intento verificarlo en etherscan , entiendo que necesito pegar el contenido del archivo importado.
Recibo un error en etherscan que indica que los códigos de bytes de los archivos concatenados e implementados no son los mismos. Lo extraño es que si implemento el contrato (con importaciones) en remix , el código de bytes coincide con el archivo fuente concatenado.
Aquí hay un ejemplo mínimo de contratos que exhiben este comportamiento.
Combined.sol
es el archivo concatenado y Outer.sol
contiene el contrato que se implementa.
Esto es lo que estoy haciendo que da un error:
Outer.sol
con trufaConcatenated.sol
código fuente y presione verificarError, los bytecodes no coinciden.
0.4.11
en remix y truffle.Actualmente, etherscan no admite la verificación de contratos de varios archivos. Pero hay una discusión en el reddit de etherscan sobre este tema.
La concatenación de archivos en uno funcionó hace algún tiempo, pero desde la versión 0.4.7, Solidity incluye el hash de los metadatos del contrato al final del contrato compilado . Como estos metadatos contienen nombres de archivos y hashes, es posible que obtenga el mismo código de bytes después de concatenar y compilar, pero este hash será diferente.
Creo que la motivación detrás de agregar hash de estos metadatos al contrato implementado es hacer que la verificación de la fuente sea automática, ya que cada contrato implementado contiene un enlace de enjambre a las fuentes, la versión del compilador y las opciones de compilación.
Construí una CLI que puede ayudarte, llamada multisol . Puede instalarlo a través de Homebrew si está en Mac, o descargar uno de los ejecutables que proporciono si está en Windows o Linux:
$ brew tap paulrberg/multisol
$ brew install multisol
Entonces puedes usarlo así:
$ multisol path/to/YourContract.sol
Esto generará una carpeta llamada "multisol-yourcontract" que se puede usar para verificar el código fuente en Etherscan para una instancia implementada de YourContract.sol
. Tenga en cuenta que el tipo de verificación es "Solidez (archivos de varias partes)".
Lo creé truffle-plugin-verify
para automatizar la verificación de contratos de Truffle en Etherscan.
npm install truffle-plugin-verify
truffle.js
otruffle-config.js
module.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
Después de migrar su Outer
contrato a Kovan, puede verificarlo en Etherscan ejecutando:
truffle run verify Outer --network kovan
Se puede encontrar más información en el repositorio o en mi artículo Verificar automáticamente los contratos inteligentes de Truffle en Etherscan .
--debug
bandera? github.com/rkalis/truffle-plugin-verify/issues/new
Jakub Wojciechowski
travis jacobs
DeviatePez