Ayer implementé un contrato con Ropsten ( https://ropsten.etherscan.io/address/0x1fe59c223fa4e9781237f0f49a15ca598069cc30 ) que se basa en la V2 del codificador ABI. Por lo tanto, incluye declaraciones
pragma experimental ABIEncoderV2;
Intenté ejecutar la verificación de código de Etherscan ( https://ropsten.etherscan.io/verifyContract2 ) con una versión plana de mi código Solidity, la versión del compilador coincidente, el indicador de optimización, las ejecuciones del optimizador, etc. Sin embargo, el resultado de la verificación del código es negativo.
En junio, cuando también implementé contratos con el mismo pragma, recibí un mensaje del servicio de asistencia de Etherscan de que no son compatibles con ABIEncoderV2. Esto a pesar del hecho de que la compilación en Remix solo emite una advertencia y Etherscan afirma respaldar los contratos que se compilan en Remix.
Así que estoy buscando alternativas. ¿Alguien puede respaldar la hipótesis de que es la falta de soporte para ABIEncoderV2 lo que todavía está causando problemas de verificación de código? ¿Existen también otras alternativas para la verificación del código público de los contratos inteligentes?
Salud,
Jens Ivar
La verificación del código fuente no funcionó para mí cuando traté de aplanar el código fuente en un solo archivo y subirlo a etherscan.io. Creo que eso se debe a que pragma experimental ABIEncoderV2;
en el proyecto de varios archivos se aplica solo a algunos archivos, pero cuando aplana los archivos a uno solo, se aplica a todo el código fuente.
Resolvió este problema implementando el binario obtenido al compilar la versión preaplanada:
truffle-flattener
oetherlime flatten
¿Has probado a compilar con 0.4.25
? Después de hacerlo, pude eliminar ABIEncoderV2
y mis verificaciones comenzaron a funcionar.
Asegúrese de poner la pragma experimental ABIEncoderV2;
línea después de la línea con la versión de Solidity. Por alguna razón, se compila de manera diferente si es anterior al número de versión.
JBrouwer
jijordre