Solidity

獲取契約的abi

  • May 31, 2018

在我的聯繫人中有多個導入並成功部署了我的契約。這是我的合約地址 0xc2d4d839001f9d985618a22b89155ea8d6550ae6

如何獲得我的契約的 abi :

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 {

我試過這個:

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

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

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

但它不起作用。如何獲取智能合約的 abi?

將原始碼保存在文件中並使用solidity 編譯器生成ABI。

你可以安裝它

npm install -g solc

或者

yarn global add solc

然後針對您的原始碼執行它

solcjs --abi contract.sol

它將在您的目前目錄中生成 ABIcontract_sol_[ContractName].abi

獲得 ABI 的簡單解決方案是使用Remix

例如,如果我將您的程式碼稍微修改為以下


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 {
}

然後,您可以按照以下簡單步驟在編譯選項卡的詳細資訊部分獲取 ABI:

在此處輸入圖像描述

但是,您會注意到我的導入語句和您的有兩個不同之處:

  1. Remix 需要一個指向 github 帳戶的 URL。
  2. 您使用的是過時版本的 OpenZeppelin 庫。

看起來您擁有的程式碼來自Truffle項目,在這種情況下,當您呼叫truffle compileDeveloperCrowdsale.json 文件時,將在 ../build/contracts 目錄中創建文件。此 JSON 將包含 ABI。

引用自:https://ethereum.stackexchange.com/questions/42600