Obtener el abi de contrato

En mi contacto tengo múltiples importaciones y desplegué exitosamente mi contrato. Esta es mi dirección de contrato0xc2d4d839001f9d985618a22b89155ea8d6550ae6

¿Cómo puedo obtener el abi de mis contratos?

pragma solidity ^0.4.18;

import './DeveloperToken.sol';
import 'zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol';
import 'zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol';

contract DeveloperCrowdsale is CappedCrowdsale, RefundableCrowdsale {

Intenté esto:

var compiled = web3.eth.compile.solidity(contractaddress);

var code = compiled.code;
var abi = compiled.info.abiDefinition;

var contract = web3.eth.contract(abi);

Pero no está funcionando. ¿Cómo puedo obtener el abi de mi contrato inteligente?

Respuestas (2)

Guarde su código fuente en un archivo y use el compilador solidity para generar el ABI.

Puedes instalarlo con

npm install -g solc

o

yarn global add solc

y luego ejecutarlo contra su código fuente

solcjs --abi contract.sol

Generará el ABI en su directorio actualcontract_sol_[ContractName].abi

Intenté esto, me está dando un error: solcjs --abi DeveloperCrowdsale.sol DeveloperCrowdsale.sol: 3: 1: ParserError: fuente "DeveloperToken.sol" no encontrada: archivo no proporcionado inicialmente. importar './DeveloperToken.sol'; ^-------------------------------------------^ DeveloperCrowdsale.sol:4:1: ParserError: Fuente "zeppelin-solidity/contracts/crowdsale/ CappedCrowdsale.sol" no encontrado: archivo no proporcionado inicialmente. import 'zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol'; ^------------------------------------------------- ----------------^
DeveloperCrowdsale.sol:5:1: ParserError: fuente "zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol" no encontrada: archivo no proporcionado inicialmente. import 'zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol'; ^------------------------------------------------- --------------------^

La solución simple para obtener el ABI es usar Remix :

Por ejemplo, si modifico tu código ligeramente para que sea el siguiente


pragma solidity ^0.4.18;

import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/token/ERC20/ERC20.sol';
import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol';
import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/distribution/RefundableCrowdsale.sol';

contract DeveloperToken is ERC20 {

}   

contract DeveloperCrowdsale is CappedCrowdsale, RefundableCrowdsale {
}

Luego puede obtener el ABI en la sección de detalles de la pestaña de compilación siguiendo estos sencillos pasos:

ingrese la descripción de la imagen aquí

Sin embargo, notará que hay dos diferencias entre mis declaraciones de importación y las suyas:

  1. Remix necesita una URL para la cuenta de github.
  2. Está utilizando una versión obsoleta de las bibliotecas de OpenZeppelin.

Parece que el código que tiene es de un proyecto Truffle , en cuyo caso, cuando llame truffle compile, se creará un archivo DeveloperCrowdsale.json en el directorio ../build/contracts. Este JSON contendrá la ABI.

Sí, tiene usted razón . Estoy usando trufa para compilar e implementar el contrato. Sí, en compilación/contratos tiene el archivo DeceloperCrowdsale.json que contiene el siguiente código pastebin.com/b9BskCAh