Convierta argumentos de contrato de JSON a formato codificado ABI

Quiero verificar un código de contrato en Etherscan, pero no sé cómo obtener los argumentos en formato codificado ABI. Tengo el código fuente y la interfaz en JSON. ¿Hay alguna herramienta que pueda usar o alguna forma fácil de obtener el JSON en formato ABI?

Nota: utilicé solo el "Contrato de implementación" de Ethereum Wallet (Mist), sin compilador sofisticado ni nada.

El código fuente: https://gist.github.com/crutor0x/45cd845349345190458df7f7412654e8

JSON ABI: https://gist.github.com/crutor0x/dd97e9593ffb696bfb583481dccb86d9

Dirección del contrato: 0x3c75226555fc496168d48b88df83b95f16771f37

Respuestas (3)

La página "Verificar contrato" solicita "Argumentos del constructor con codificación ABI".

En su caso, el constructor no tiene parámetros, por lo que puede dejar dicho campo vacío.

En el caso general, cuando su constrctor tiene parámetros, puede proceder de la siguiente manera:

Puede usar ethereumjs-abi para codificar/decodificar los parámetros para las llamadas de transacción.

Supongamos que su constructor es MyToken(address _to, uint256 _value, bool _enabled). Los tipos de parámetros son ["dirección", "uint256", "bool"].

Si ha creado el contrato MyToken ("0x1234567812345678", 0x314159268, verdadero). Luego, los valores de los parámetros son ["0x1234567812345678", "0x314159268", verdadero].

Luego puede codificar los valores con rawEncode(parameterTypes, parameterValues).

var abi = require('ethereumjs-abi')

var parameterTypes = ["address", "uint256", "bool"];
var parameterValues = ["0x1234567812345678", "0x314159268", true];

var encoded = abi.rawEncode(parameterTypes, parameterValues);

console.log(encoded.toString('hex'));

En la ejecución, saldrá

00000000000000000000000000000000000000000000000000123456781234567800000000000000000000000000000000000000000000000000031415926800000000000000000000000000000000000000000000SEPLICADOS

También probé esto, pero por alguna razón aparece este error: "Error: no se puede encontrar el módulo 'ethereumjs-abi'" github.com/ethereumjs/ethereumjs-abi/issues/51
@NineCattoRules ¿Instalaste ethereumjs-abi en tu proyecto npm?
Lo he intentado a nivel local y mundial. También lo intenté, npm cache verifypero siempre obtengo el mismo error nuevamente. Y la ruta en Win a node.js está configurada correctamente.
@NineCattoRules Probé mi ejemplo y funciona sin problemas (Windows 7 x64). En un directorio vacío, cree el proyecto npm init -y, agregue ethereumjs-abi npm i --save ethereumjs-abi, guarde el código como index.js y luego ejecútelo npm index.js. Muestra la misma salida. Sugeriría probar en una computadora diferente o en una máquina virtual. Pero esto está fuera del alcance de este foro, es mejor que preguntes en la sección de javascript de stackoverflow.
¡Si, funciona! El último comando esnode index.js
¿Cómo puede codificar el nombre del método MyToken y usarlo con otros parámetros codificados?
nvm, lo encontré, usomethodid
@Ismael ¿Cómo puedo decodificar la cadena codificada anterior dentro de Solidity Smart Contract? ¿Es posible?
@PinankLakhani Es mejor si crea una nueva pregunta. Pero debería ser posible, ya se hace para funciones públicas y externas.

En caso de que quiera usar una herramienta en línea simple para codificar parámetros, puede usar https://abi.hashex.org

Puede ingresar abi para analizar automáticamente los tipos de parámetros o simplemente ingresarlos manualmente. En el constructor del selector de tipo de función, se debe elegir.

Aquí hay un ejemplo del uso de este servicio, en la parte inferior hay parámetros codificados en abi que ingresa en el campo de parámetros del constructor etherscan.io.parámetros

El sitio https://abi.hashex.org no funciona para mí y siempre se queja de "ingresar JSON correcto".

Puedes probar este sitio .