题目
产品要求「我的交易记录」页面按时间倒序展示最近 20 条,并且要能翻页。
你发现标准接口按交易哈希或区块查询,没有「按地址列出交易」的方法。请说明可以怎么做,以及各自的成本与限制。
考察目标
- 能否识别标准接口在历史查询上的能力缺口。
- 是否理解区块扫描的成本与限制。
- 能否在自建与第三方之间做出取舍。
考察历史记录的获取路径,以及区块扫描与索引服务在成本上的取舍。
产品要求「我的交易记录」页面按时间倒序展示最近 20 条,并且要能翻页。
你发现标准接口按交易哈希或区块查询,没有「按地址列出交易」的方法。请说明可以怎么做,以及各自的成本与限制。
JSON-RPC 的方法按哈希、区块号或区块哈希查询交易,没有按地址枚举交易的条目;按地址取数据要靠 eth_getLogs 过滤事件,或按高度扫描区块再过滤。事件路径要求目标合约发出了带地址索引的事件,原生资产转账不经过代币合约,不产生这类事件。
eth_getLogs 的 address 过滤的是发出日志的合约地址;检索 ERC-20 转账参与者还要按 Transfer 事件中索引化的 from 或 to topic 过滤,且不能用这一路径找原生资产转账(依据:EIP-1474 §eth_getLogs;EIP-20 §Events)。eth_getBlockByNumber 的第二参数为 true 时返回完整交易对象,可用于按高度扫描并过滤地址(依据:EIP-1474 §Specification 的 Methods 条目 eth_getBlockByNumber)Transfer 事件;原生资产转账由协议层处理,不经过代币合约,不产生该事件(依据:EIP-20 §Specification 的 Events)eth_getTransactionReceipt 按交易哈希返回收据,收据包含 blockHash、blockNumber、from、to、logs 等字段,可用于核对某笔交易是否已上链(依据:EIP-1474 §Specification 的 Methods 条目 eth_getTransactionReceipt)发现这道题有问题? 反馈此题