Etherscan 的 API使用

虽然以太坊提供了 Web3Json Rpc 这 2 种 API,geth 也额外提供了一些 API,但是对于开发以太坊应用来说还是显得有些不足,比如说获取交易记录的时间,需要先通过交易的 hash 找到该交易对应的区块 id,然后才能找到对应的时间,查询起来相当不方便。

好在Etherscan对外提供了一些公共的 API,给我们提供了额外的能力来处理更多的业务场景。

Etherscan api

为了方便开发人员更好地使用ethersacn.io,网站提供了一系列 API 供开发人员使用。

使用方法

API 的使用非常简单,基本上都是 get 方法,通过 http 请求就可以直接调用,在每个 Api 的说明文档都有对应的例子可以查看。

模块介绍

API 主要包含以下模块:账号、智能合约、交易、区块、事件日志、代币及工具等。

账号 API

账号相关的 API,有获取账号金额,获取交易记录等,该模块提供的 API 最多。

获取单个账号金额

API 示例

https://api.etherscan.io/api?module=account&action=balance&address=0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a&tag=latest&apikey=YourApiKeyToken

参数说明

  • module:对应的模块名称,这里是账户模块,所以是moudle=account
  • action:对应的操作,这里是balance,即获取金额。
  • address:要查询金额的账号地址。
  • tag:之前在介绍 geth 的 API 时讲过获取账号金额需要 2 个参数,一个是账号地址,另外一个就是 tag,一般写latest就可以了。
  • apikey:你在Etherscan上创建的 apikey,带上没有请求的限制,也可以不带,下面会介绍 API 的请求限制。

其中module、action、apikey是每个 API 都有的参数,其他的参数则因不同 API 而不同。

返回结果

{"status":"1","message":"OK","result":"670456215218885498951364"}

获取多个账号金额

API 示例

https://api.etherscan.io/api?module=account&action=balancemulti&address=0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a,0x63a9975ba31b0b9626b34300f7f627147df1f526,0x198ef1ec325a96cc354c7266a038be8b5c558f67&tag=latest&apikey=YourApiKeyToken

参数说明

(前面有讲过的参数就不讲了,下同)

与单个账号金额 API 相比,参数address,号分隔多个账号,最多可支持 20 个账号的金额查询。

返回结果

{
    "message": "OK",
    "result": [
        {
            "account": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",
            "balance": "40807168564070000000000"
        },
        {
            "account": "0x63a9975ba31b0b9626b34300f7f627147df1f526",
            "balance": "332567136222827062478"
        },
        {
            "account": "0x198ef1ec325a96cc354c7266a038be8b5c558f67",
            "balance": "0"
        }
    ],
    "status": "1"
}

获取”正常”交易记录

API 示例

https://api.etherscan.io/api?module=account&action=txlist&address=0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a&startblock=0&endblock=99999999&page=1&offset=10&sort=asc&apikey=YourApiKeyToken

参数说明

  • action:为txlist,表示列出交易记录。
  • address:要查询交易记录的账号地址。
  • startblock:起始查询块 id,可选,默认值为 0。
  • endblock:结束查询块 id,可选,默认值为最后一个区块。
  • page: 页数(没错,这个 API 还支持分页),可选。
  • offset: 查询到记录数,可选,默认是查询 10000 条记录。
  • sort: 排序规则,可以正序asc和倒序desc

返回结果

{
    "message": "OK",
    "result": [
        {
            "blockHash": "0x2d0a9228f22fe85596d246040d4fd7dc6b1a55920bae02b68e731d55a890b315",
            "blockNumber": "47894",
            "confirmations": "5435815",
            "contractAddress": "",
            "cumulativeGasUsed": "21612",
            "from": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",
            "gas": "23000",
            "gasPrice": "400000000000",
            "gasUsed": "21612",
            "hash": "0x7e1503d2001cab2f432b56a62a3ee874782c8e33cbd79a664d155a758c1784a2",
            "input": "0x454e34354139455138",
            "isError": "0",
            "nonce": "1",
            "timeStamp": "1438948043",
            "to": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2",
            "transactionIndex": "0",
            "txreceipt_status": "",
            "value": "9001000000000000000000"
        },
    ],
    "status": "1"
}

获取”内部”交易记录

API 示例

https://api.etherscan.io/api?module=account&action=txlistinternal&address=0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3&startblock=0&endblock=2702578&page=1&offset=10&sort=asc&apikey=YourApiKeyToken

参数说明

参数与上一个 API 基本相同,只有actiontxlistinternal这一点不同,这 2 种交易的区别是什么呢?简单的理解就是“正常”的交易是会记录到区块链上的,而“内部”交易是指不会记录到区块链上的记录,比如交易失败的记录。

另外这个 API 还可以通过交易 hash 查看交易的详情。

https://api.etherscan.io/api?module=account&action=txlistinternal&txhash=0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170&apikey=YourApiKeyToken

返回结果

{
    "message": "OK",
    "result": [
        {
            "blockNumber": "2547619",
            "contractAddress": "",
            "errCode": "Bad jump destination",
            "from": "0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3",
            "gas": "346878",
            "gasUsed": "0",
            "hash": "0x2896441f9d1f167b4a3f987d82233e7d238e6a50a227c4b612dbc82f34bb533d",
            "input": "",
            "isError": "1",
            "timeStamp": "1478013203",
            "to": "0x20d42f2e99a421147acf198d775395cac2e8b03d",
            "traceId": "0",
            "type": "call",
            "value": "71000000000000000000"
        },
    ],
    "status": "1"
}

获取 ERC20 代币交易事件记录

API 示例
https://api.etherscan.io/api?module=account&action=tokentx&contractaddress=0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2&address=0x4e83362442b8d1bec281594cea3050c8eb01311c&page=1&offset=100&sort=asc&apikey=YourApiKeyToken

参数说明

  • action: 值为tokentx,表示查询代币交易记录。
  • contractaddress: 代币的智能合约地址。
  • address: 只查询和该账户地址相关的记录,可选。

返回结果

{
    "message": "OK",
    "result": [
        {
            "blockHash": "0xb3ff25909ae9ae5b65baecab1114dff885fbd5a1607081229ea50b6a2db13ae8",
            "blockNumber": "5278009",
            "confirmations": "205861",
            "contractAddress": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",
            "cumulativeGasUsed": "1050219",
            "from": "0x4e83362442b8d1bec281594cea3050c8eb01311c",
            "gas": "191157",
            "gasPrice": "4000000000",
            "gasUsed": "97646",
            "hash": "0x497f15095877bc06b9e0f422673c1e0f13a2b4224b615ef29ce8c46e249364d1",
            "input": "0x73b38101000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000046aefaa28844d7d839d7",
            "nonce": "730",
            "timeStamp": "1521386734",
            "to": "0x69076e44a9c70a67d5b79d95795aba299083c275",
            "tokenDecimal": "18",
            "tokenName": "Maker",
            "tokenSymbol": "MKR",
            "transactionIndex": "28",
            "value": "553365126770755906"
        },
    ],
    "status": "1"
}

获取已开采的区块列表

API 示例
https://api.etherscan.io/api?module=account&action=getminedblocks&address=0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b&blocktype=blocks&page=1&offset=10&apikey=YourApiKeyToken

参数说明

  • action: 值为getminedblocks
  • blocktype:区块类型,可以选区块blocks和叔块uncles,不了解叔块的可以查看这里

返回结果

{
    "message": "OK",
    "result": [
        {
            "blockNumber": "3462296",
            "blockReward": "5194770940000000000",
            "timeStamp": "1491118514"
        },
    ],
    "status": "1"
}

合同 API

智能合约相关的 API,其实只有一个获取智能合约接口的 API,但是这个 API 非常有用。

获取智能合约接口

API 示例

https://api.etherscan.io/api?module=contract&action=getabi&address=0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413&apikey=YourApiKeyToken

参数说明

  • module: 值为contract
  • action: 值为getabi
  • address: 智能合约地址。

智能合约的 abi 就是一个 json 对象,通过这个对象我们可以调用其接口方法,后面会写一篇文章介绍如何操作 abi 对象,敬请期待。

返回结果

返回结果内容比较长,这里省略,就是一个 json 对象,感兴趣的可以自行调用该 API 看结果。

使用限制

账号和智能合约的 API 已经能满足大部分的业务需求了,其他模块的 API 感觉没什么太大的作用,这里就不介绍了,感兴趣的读者可以自行查阅。

这里再说下 API 的使用限制,刚才提到每个 API 都有一个apikey参数,如果 API 没加上这个参数的话,每个 API 的请求次数不能超过 5 次每秒。

总结

Etherscan提供的这些 API 有些是和以太坊提供的 API 有重复的,比如说获取账号金额,获取事件日志记录等,但有一些 API 给我们带来了很大的便利性,比如获取账号交易记录,有了这个 API 就不用使用几个原生 API 进行各种数据拼接了。

另外Etherscan的这套 API 在 Rinkeby 测试网络也有一套一模一样的,区别只是前面的 url 不同,Rinkeby 的是:api-rinkeby.etherscan.io,感兴趣的同学可以去试试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 如何使用 Etherscan 的 API 虽然以太坊提供了 Web3 和 Json Rpc 这 2 种 API,g...
    _高冰阅读 8,546评论 2 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 非洲十年, 流了年,时间成了线, 白驹过隙,一瞬间; 非洲十年, 曾经的青涩,变成中年, 除了经历,唯有感叹; 非...
    非洲鲫鱼阅读 248评论 3 10
  • 渴望长大,背着哥哥的书包,煞有介事在玻璃博物馆。 运动会。 制作玻璃万花筒。 运动会。 理发店写生。 最爱的棉花糖...
    傻璐璐阅读 308评论 0 0
  • 一般按键延时在20ms左右,根据时钟频率决定你的计数范围。程序非常简单,但经常用到,对于FPGA初学者要好好学习这部分。
    言丶武阅读 8,597评论 0 3