输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
预测市场
证券与期货
链上与自定义接入

查询合约的事件日志(eth_getLogs),并按ABI进行解码。支持按区块范围和事件的indexed参数进行过滤,可用于监控成交、到账、流动性池变化等链上事件。

exchange.IO(k, query)

示例

查询USDC转账事件和Uniswap流动性池的Swap事件。

javascript
function main() { var USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" var POOL = "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640" // Uniswap V3 USDC/WETH 0.05% 池 // 代币的 Transfer 事件内置支持;fromBlock 为负数表示相对最新区块 var transfers = exchange.IO("logs", { address: USDC, event: "Transfer", fromBlock: -2 }) Log("最近3个区块的 USDC 转账:", transfers.length, "条") if (transfers.length > 0) { var t = transfers[0] Log(t.blockNumber, t.transactionHash, t.args.from, "→", t.args.to, t.args.value) // 按 indexed 参数过滤 var mine = exchange.IO("logs", { address: USDC, event: "Transfer", fromBlock: -2, filter: { from: t.args.from } }) Log("同一发送方:", mine.length, "条") } // 其它合约的事件需要先注册包含该事件的 ABI exchange.IO("abi", POOL, JSON.stringify([{ type: "event", name: "Swap", anonymous: false, inputs: [ { indexed: true, name: "sender", type: "address" }, { indexed: true, name: "recipient", type: "address" }, { indexed: false, name: "amount0", type: "int256" }, { indexed: false, name: "amount1", type: "int256" }, { indexed: false, name: "sqrtPriceX96", type: "uint160" }, { indexed: false, name: "liquidity", type: "uint128" }, { indexed: false, name: "tick", type: "int24" }] }])) var swaps = exchange.IO("logs", { address: POOL, event: "Swap", fromBlock: -20 }) swaps.forEach(function (s) { Log("Swap 区块", s.blockNumber, "amount0:", s.args.amount0, "amount1:", s.args.amount1, "tick:", s.args.tick) }) }

返回值

类型描述

array

返回日志数组,每项包含address(小写)、blockNumber、logIndex、transactionIndex(数字)、transactionHash、blockHash、topics、data、removed,能按ABI解码时另有event(事件名)和args(参数)。

参数

名称类型必填描述

k

string

是

固定为logs,用于查询事件日志。

query

object

是

查询条件:address为合约地址(字符串或数组);event为事件名称或完整的事件签名(例如"Transfer(address,address,uint256)");filter为按indexed参数名进行过滤的对象,值为数组时表示匹配其中任意一个值;fromBlock、toBlock用于指定区块范围(可为数字或latest等标签,负数表示相对于最新区块的偏移,默认均为latest);也可以直接设置topics或blockHash。

参考

备注

代币的Transfer、Approval事件已内置支持;其他事件需要先通过exchange.IO("abi", ...)注册包含该事件的ABI。

当节点对查询的区块跨度或返回条数有限制时,将返回节点给出的错误信息,此时可缩小区块范围进行分段查询。

目前仅支持以太坊(EVM)链,不支持波场(TRON)。