eth_getLogs
返回匹配指定过滤器对象的日志数组。
API请求
POST https://<network>.infura.io/v3/YOUR-PROJECT-ID
请求头:
Content-Type: application/json
请求参数为过滤器对象,结构如下:
- address:地址,可选
- fromBlock:开始区块,可选,默认值:earliest
- toBlock:结束区块,可选,默认值:latest
- topics:主题数组,可选
- blockhash:区块哈希,可选,不可与fromBlock、toBlock同时使用
请求示例:
JSON-RPC over HTTPS POST:
curl https://mainnet.infura.io/v3/YOUR-PROJECT-ID \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}],"id":1}'
JSON-RPC over websockets:
wscat -c wss://mainnet.infura.io/ws/v3/YOUR-PROJECT-ID
>{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}],"id":1}
API响应
返回一个数组,成员类型按过滤器不同有所区别:
- 对于使用eth_newBlockFilter创建的过滤器,返回区块哈希,例如: ["0x3454645634534..."]
- 对于使用eth_newPendingTransactionFilter创建的过滤器,返回交易哈希,例如: ["0x6345343454645..."]
- 对于使用eth_newFilter创建的过滤器,返回日志对象,结构如下:
- removed: 日志是否已删除
- logIndex: 日志在区块内的索引
- transactionIndex: 产生日志的交易索引
- transactionHash: 产生日志的交易哈希
- blockHash: 日志所在区块的哈希
- blockNumber: 日志所在区块号
- address: 产生日志的源地址
- data: 日志的非索引参数
- topics:日志的主题数组
响应结果示例:
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"address": "0x1a94fce7ef36bc90959e206ba569a12afbc91ca1",
"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70",
"blockNumber": "0x5c29fb",
"data": "0x0000000000000000000000003e3310720058c51f0de456e273c626cdd35065700000000000000000000000000000000000000000000000000000000000003185000000000000000000000000000000000000000000000000000000000000318200000000000000000000000000000000000000000000000000000000005c2a23",
"logIndex": "0x1d",
"removed": false,
"topics": [
"0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"
],
"transactionHash": "0x3dc91b98249fa9f2c5c37486a2427a3a7825be240c1c84961dfb3063d9c04d50",
"transactionIndex": "0x1d"
},
{
"address": "0x06012c8cf97bead5deae237070f9587f8e7a266d",
"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70",
"blockNumber": "0x5c29fb",
"data": "0x00000000000000000000000077ea137625739598666ded665953d26b3d8e374400000000000000000000000000000000000000000000000000000000000749ff00000000000000000000000000000000000000000000000000000000000a749d00000000000000000000000000000000000000000000000000000000005c2a0f",
"logIndex": "0x57",
"removed": false,
"topics": [
"0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"
],
"transactionHash": "0x788b1442414cb9c9a36dba2abe250763161a6f6395788a2e808f1b34e92beec1",
"transactionIndex": "0x54"
}
]
}
已知的限制
为了避免查询消耗过多资源,eth_getLogs请求目前限制为10000个结果。如果查询会返回 太多的结果那么rpc调用将返回如下错误:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32005,
"message": "query returned more than 10000 results"
}
}
这种情况下,你需要收缩查询条件,例如缩小区块范围,或者使用主题、地址进行限定。