Solidity
獲取契約的abi
在我的聯繫人中有多個導入並成功部署了我的契約。這是我的合約地址
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
它將在您的目前目錄中生成 ABI
contract_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:
但是,您會注意到我的導入語句和您的有兩個不同之處:
- Remix 需要一個指向 github 帳戶的 URL。
- 您使用的是過時版本的 OpenZeppelin 庫。
看起來您擁有的程式碼來自Truffle項目,在這種情況下,當您呼叫
truffle compile
DeveloperCrowdsale.json 文件時,將在 ../build/contracts 目錄中創建文件。此 JSON 將包含 ABI。