contract/getabi - 获取合约ABI
使用contract模块的getabi方法,可以获取已经在etherscan上完成源代码验证的 合约的ABI。在etherscan网站上完成验证的合约大约在5分钟之内同步到API服务器。
API定义
GET|POST /api
查询|表单参数:
- module:contract
- action:getabi
- address:要获取ABI的合约部署地址
- apikey:etherscan的API密钥
API返回结果
返回一个JSON对象,主要字段如下:
- status:状态码,1为成功
- message:调用描述信息,OK为成功
- result:调用结果,为合约的ABI字符串
示例代码
以curl为例的调用代码如下,也可以点击这里查看在浏览器中的调用结果:
~$ curl https://api.etherscan.io/api?module=contract&action=getabi&address=0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413&apikey=YourApiKeyToken
返回结果:
{
"status": "1",
"message": "OK",
"result": "..."
使用getabi方法提取了指定合约的abi之后,就可以调用其方法了。例如下面的 代码使用web3.js和jquery与合约交互:
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider());
var version = web3.version.api;
$.getJSON('http://api.etherscan.io/api?module=contract&action=getabi&address=0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359', function (data) {
var contractABI = "";
contractABI = JSON.parse(data.result);
if (contractABI != ''){
var MyContract = web3.eth.contract(contractABI);
var myContractInstance = MyContract.at("0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359");
var result = myContractInstance.memberId("0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715");
console.log("result1 : " + result);
var result = myContractInstance.members(1);
console.log("result2 : " + result);
} else {
console.log("Error" );
}
});