美文网首页区块链研习社互联网科技区块链大学
Etherscan API 获取事件日志 - 区块链数据开发实战

Etherscan API 获取事件日志 - 区块链数据开发实战

作者: 极客红石 | 来源:发表于2019-04-26 22:53 被阅读57次

    简介:Etherscan 大多数朋友都比较熟悉了,它是主流以太坊区块浏览器。Etherscan 有面向开发者提供 API 服务以方便其检索以太坊区块链信息。本文示例如何使用 Etherscan API 获取以太坊事件日志。

    Etherscan 大多数朋友都比较熟悉了,它是主流以太坊区块浏览器。Etherscan 有面向开发者提供 API 服务以方便其检索以太坊区块链信息。

    Etherscan API 在没有密钥的情况下,支持每秒最多五次请求。有更多请求需求可以在这里申请密钥:https://etherscancom.freshdesk.com/support/solutions/articles/35000022163-i-need-an-api-key

    使用 Etherscan API 获取以太坊事件日志:

    事件日志 API 旨在提供本机 eth_getLogs 的替代方案。以下是支持的过滤器参数列表:

    fromBlock, toBlock, address
    topic0, topic1, topic2, topic3 (每个topic32字节)
    topic0_1_opr (and|or between topic0 & topic1), topic1_2_opr (and|or between topic1 & topic2), topic2_3_opr (and|or between topic2 & topic3),topic0_2_opr (and|or between topic0 & topic2), topic0_3_opr (and|or between topic0 & topic3), topic1_3_opr (and|or between topic1 & topic3)

    fromBlock & toBlock 接受区块号(整数,非十六进制)或者 'latest'(earliest & pending 暂不支持)作为参数;

    topicX_X_opr 接受 'and' 或者 'or',且仅限上面列出的几种;

    fromBlock & toBlock 参数为必填;

    必须使用 address 和/或 topic(X) 参数,当使用多个 topic(X) 参数时,需要使用
    topicX_X_opr

    示例:

    从块号379224获取事件日志到“最新”块,其中日志地址为
    0x33990122638b9132ca29c723bdf037f1a891a70c,topic地址为 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545:

    语句:

    https://api.etherscan.io/api?module=logs&action=getLogs&fromBlock
    = 379224
    &toBlock = latest
    &address = 0x33990122638b9132ca29c723bdf037f1a891a70c
    &topic0 = 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545
    &apikey = YourApiKeyToken

    当然,不使用 apikey 也是可以查询的:

    https://api.etherscan.io/api?module=logs&action=getLogs&fromBlock
    = 379224
    &toBlock = latest
    &address = 0x33990122638b9132ca29c723bdf037f1a891a70c
    &topic0 = 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545

    Node.js 代码示例:

    const fetch = require('node-fetch');
    
    fetch('https://api.etherscan.io/api?module=logs&action=getLogs&fromBlock 
    = 379224&toBlock = latest&address = 0x33990122638b9132ca29c723bdf037f1a891a70c&topic0 = 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545', {
        method: 'get',
    }).then(response => response.json()
        .then(data => console.log(data)));
    

    返回的 JSON 示例:

    {
      "status": "1",
      "message": "OK",
      "result": [
        {
          "address": "0x33990122638b9132ca29c723bdf037f1a891a70c",
          "topics": [
            "0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545",
            "0x72657075746174696f6e00000000000000000000000000000000000000000000",
            "0x000000000000000000000000d9b2f59f3b5c7b3c67047d2f03c3e8052470be92"
          ],
          "data": "0x",
          "blockNumber": "0x5c958",
          "timeStamp": "0x561d688c",
          "gasPrice": "0xba43b7400",
          "gasUsed": "0x10682",
          "logIndex": "0x",
          "transactionHash": "0x0b03498648ae2da924f961dda00dc6bb0a8df15519262b7e012b7d67f4bb7e83",
          "transactionIndex": "0x"
        },
        {
          "address": "0x33990122638b9132ca29c723bdf037f1a891a70c",
          "topics": [
            "0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545",
            "0x6c6f747465727900000000000000000000000000000000000000000000000000",
            "0x0000000000000000000000001f6cc3f7c927e1196c03ac49c5aff0d39c9d103d"
          ],
          "data": "0x",
          "blockNumber": "0x5c965",
          "timeStamp": "0x561d6930",
          "gasPrice": "0xba43b7400",
          "gasUsed": "0x105c2",
          "logIndex": "0x",
          "transactionHash": "0x8c72ea19b48947c4339077bd9c9c09a780dfbdb1cafe68db4d29cdf2754adc11",
          "transactionIndex": "0x"
        }
      ]
    }
    

    从块号379224获取事件日志到块400000,其中日志地址为0x33990122638b9132ca29c723bdf037f1a891a70c,主题为0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545和0x72657075746174696f6e000000000000000000000000000000000000000000000000:

    语句:

    https://api.etherscan.io/api?module=logs&action=getLogs
    &fromBlock=379224
    &toBlock=400000
    &address=0x33990122638b9132ca29c723bdf037f1a891a70c
    &topic0=0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545&
    topic0_1_opr=and
    &topic1=0x72657075746174696f6e00000000000000000000000000000000000000000000
    &apikey=YourApiKeyToken

    当然,不使用 apikey 也是可以查询的:

    https://api.etherscan.io/api?module=logs&action=getLogs
    &fromBlock=379224
    &toBlock=400000
    &address=0x33990122638b9132ca29c723bdf037f1a891a70c
    &topic0=0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545&
    topic0_1_opr=and
    &topic1=0x72657075746174696f6e00000000000000000000000000000000000000000000

    Node.js 代码示例:

    const fetch = require('node-fetch');
    
    fetch('https://api.etherscan.io/api?module=logs&action=getLogs&fromBlock=379224&toBlock=400000&address=0x33990122638b9132ca29c723bdf037f1a891a70c&topic0=0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545&
    topic0_1_opr=and&topic1=0x72657075746174696f6e00000000000000000000000000000000000000000000&apikey=YourApiKeyToken', {
        method: 'get',
    }).then(response => response.json()
        .then(data => console.log(data)));
    

    返回的 JSON 示例:

    {
      "status": "1",
      "message": "OK",
      "result": [
        {
          "address": "0x33990122638b9132ca29c723bdf037f1a891a70c",
          "topics": [
            "0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545",
            "0x72657075746174696f6e00000000000000000000000000000000000000000000",
            "0x000000000000000000000000d9b2f59f3b5c7b3c67047d2f03c3e8052470be92"
          ],
          "data": "0x",
          "blockNumber": "0x5c958",
          "timeStamp": "0x561d688c",
          "gasPrice": "0xba43b7400",
          "gasUsed": "0x10682",
          "logIndex": "0x",
          "transactionHash": "0x0b03498648ae2da924f961dda00dc6bb0a8df15519262b7e012b7d67f4bb7e83",
          "transactionIndex": "0x"
        },
        {
          "address": "0x33990122638b9132ca29c723bdf037f1a891a70c",
          "topics": [
            "0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545",
            "0x6c6f747465727900000000000000000000000000000000000000000000000000",
            "0x0000000000000000000000001f6cc3f7c927e1196c03ac49c5aff0d39c9d103d"
          ],
          "data": "0x",
          "blockNumber": "0x5c965",
          "timeStamp": "0x561d6930",
          "gasPrice": "0xba43b7400",
          "gasUsed": "0x105c2",
          "logIndex": "0x",
          "transactionHash": "0x8c72ea19b48947c4339077bd9c9c09a780dfbdb1cafe68db4d29cdf2754adc11",
          "transactionIndex": "0x"
        }
      ]
    }
    

    Etherscan API 官方文档:https://etherscan.io/apis

    Etherscan API 思维导图:

    Etherscan API.png

    我们有一个区块链知识星球,做区块链前沿资料的归纳整理以方便大家检索查询使用,也是国内顶尖区块链技术社区,欢迎感兴趣的朋友加入。如果你对上面内容有疑问,也可以加入知识星球提问我:

    区块链社群 知识星球

    相关文章

      网友评论

        本文标题:Etherscan API 获取事件日志 - 区块链数据开发实战

        本文链接:https://www.haomeiwen.com/subject/qjwpwqtx.html