跳转到内容

eth_getLogs

返回与过滤器对象匹配的日志数组。这是索引和监听合约事件时最常用的方法之一。

  1. Object — 过滤配置:
    字段类型说明
    fromBlockQUANTITY|TAG起始区块(默认 "latest"
    toBlockQUANTITY|TAG结束区块(默认 "latest"
    addressDATA|Array要过滤的合约地址
    topicsArrayTopic 过滤条件(事件索引参数)
    blockHashDATA限定单个区块

Array — 日志对象数组:

字段类型说明
addressDATA产生日志的合约地址
topicsArray已索引事件参数
dataDATA未索引事件参数
blockNumberQUANTITY区块号
transactionHashDATA交易哈希
logIndexQUANTITY区块内日志索引
Terminal window
# 查询最近的 USDC Transfer 事件
curl -X POST https://eth-mainnet.blockreq.com/v1/rpc/public \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [{
"fromBlock": "0x134E800",
"toBlock": "0x134E810",
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
}],
"id": 1
}'

Topic 0xddf252ad...Transfer(address,address,uint256) 的 keccak-256 哈希。

import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("https://eth-mainnet.blockreq.com/v1/rpc/YOUR_API_KEY");
const logs = await provider.getLogs({
address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],
fromBlock: "latest",
});
console.log(`Found ${logs.length} Transfer events`);
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("https://eth-mainnet.blockreq.com/v1/rpc/YOUR_API_KEY"))
logs = w3.eth.get_logs({
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],
"fromBlock": "latest"
})
print(f"Found {len(logs)} Transfer events")
MethodCost
eth_getLogs50 RU

大范围区块扫描会因响应体积增加 RU 消耗。