eth_newFilter
方法创建一个过滤器对象,用于在区块链中包含符合给定过滤条件的新日志(事件)时进行通知。该方法对于监控智能合约事件至关重要,是响应式dApp架构的基本构建块之一。
此方法接受一个过滤器对象作为参数,并返回一个过滤器ID,可与eth_getFilterChanges
和eth_getFilterLogs
一起使用。
过滤器选项对象
开始过滤的区块号/标签(例如,"0x1"或"latest")
过滤到的区块号/标签(例如,"0x1000"或"latest")
过滤日志的合约地址
按顺序过滤的主题,使用null进行通配符匹配
用于通过eth_getFilterChanges轮询的过滤器ID(十六进制字符串)
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x1a4b0d22dbb7284cf485c969d2857ab3"
}
topics
数组是以太坊日志过滤的最强大特性之一。它允许您匹配特定的索引事件参数:
事件签名通过对事件名称及其参数类型进行keccak256哈希计算而创建:
// Solidity事件定义
event Transfer(address indexed from, address indexed to, uint256 value);
// 事件签名计算为:
keccak256("Transfer(address,address,uint256)")
// 等于:
// 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
以太坊事件最多可以有4个主题(1个事件签名 + 3个索引参数)。
事件类型 | 事件签名 | 事件格式 |
---|---|---|
ERC-20 Transfer | 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef | Transfer(address,address,uint256) |
ERC-20 Approval | 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 | Approval(address,address,uint256) |
ERC-721 Transfer | 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef | Transfer(address,address,uint256) |
Uniswap V2 Swap | 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822 | Swap(address,uint256,uint256,uint256,uint256,address) |
PairCreated | 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9 | PairCreated(address,address,address,uint256) |
创建过滤器后,您将收到一个可用于以下操作的过滤器ID:
eth_getFilterChanges
- 轮询自上次轮询以来的新日志eth_getFilterLogs
- 获取符合过滤器条件的所有日志eth_uninstallFilter
- 在不再需要时移除过滤器