eth_getLogs

返回与给定过滤器对象匹配的所有日志数组。

Parameters

  1. Filter Object - [可选] 过滤器对象

    • blockhash [可选] 添加 EIP-234 后,blockHash 将是一个新的过滤器选项,它会将返回的日志限制为具有 32 字节哈希 blockHash 的单一区块。 使用 blockHash 相当于 fromBlock = toBlock = 具有哈希blockHash 的区块号。 如果 blockHash 出现在过滤条件中,则 fromBlocktoBlock 都不允许。

    • topics [可选] 一个有序的32字节主题数组。

    • fromBlock [可选, 默认: latest] 十六进制块号,或字符串latest, earliest or pending默认块号参数

    • toBlock [可选, 默认: latest] 十六进制块号,或字符串latest, earliest or pending默认块号参数

    • address [可选] 日志起源的合约地址或地址列表。

Request

curl https://eth-mainnet.solarpath.io/v1/YOUR-API-KEY \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"jsonrpc": "2.0", "id": 1, "method": "eth_getLogs", "params": [{"blockhash": "0xe429155011f1e8bcd46802dd261c6855e5fe3ed4d1622d047920e40dcb0e0da8","topics": ["0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff"]}]}'

Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": [
    {
      // 日志的来源地址
      "address": "0x209c4784ab1e8183cf58ca33cb740efbf3fc18ef",
      // 区块Hash
      "blockHash": "0xe429155011f1e8bcd46802dd261c6855e5fe3ed4d1622d047920e40dcb0e0da8",
      // 区块号
      "blockNumber": "0x658a13",
      "data": "0x00000000000000000000000032be343b94f860124dc4fee278fdcbd38c102d88",
      // 表示日志在区块中的索引位置
      "logIndex": "0x0",
      // 由于链重组,当日志被删除时,为true。当它是有效日志时,则为false。
      "removed": false,
      // 0到4个32字节日志参数的数组,
      // 在solidity中:第一个主题是事件签名的哈希,如: Transfer(address,address,uint256)的Sha3签名
      "topics": [
          "0x23919512b2162ddc59b67a65e3b03c419d4105366f7d4a632f5d3c3bee9b1cff"
      ],
      // 交易Hash
      "transactionHash": "0x420ac75c166f74a1a3af051a0c0cba9dded1ee3378d5770097877dddf29590df",
      // 创建交易的日志索引位置整数
      "transactionIndex": "0xf"
    }
  ]
}

为了防止查询消耗过多的资源,eth_getLogs 查询单个结果集限定在 10,000 以内,且查询时长不得超过10s。

如果发生以上异常情况,建议下面这样做:

  • 使用 fromBlock 和 toBlock 将您的查询限制在较小范围的区块。

  • 请考虑将查询的topics限制在单个合约地址以内。

  • 如频繁拉取,最佳实践是使用 SolarPath 提供的 Event Hook 来接收日志。

最后更新于