eth_getBlockReceipts 可一次取得整块交易回执,适合索引器批量核对。本文说明区块标识、回执数组、交易顺序、日志与状态字段,并给出处理 null、链重组和客户端差异的方法。
逐交易调用 eth_getTransactionReceipt 容易产生大量请求,也可能在跨请求间遇到链头变化。eth_getBlockReceipts 把一个区块的回执集中返回,适合批量索引,但“拿到数组”仍不等于数据已经可以永久入库。
索引器数据契约
eth_getBlockReceipts按区块号、区块标签或区块哈希返回该区块全部交易回执,区块不存在时可返回null。
整批数据的主键必须包含 blockHash,而不是只有 blockNumber。每条回执还要携带 transactionHash、transactionIndex、blockNumber、blockHash、status、Gas 与 logs;原始响应与解析版本需要可追溯。
| 观察项 | 正确用途 | 常见误读 |
|---|---|---|
| block number/tag | 按高度或标签请求 | 标签会随链头移动 |
| block hash | 固定具体区块身份 | 更适合复现和重组判断 |
| transactionIndex | 交易在区块内顺序 | 应检查连续性与唯一性 |
| status | 执行成功或失败 | 失败交易仍可能有费用和日志语义 |
| logs | 事件数组 | 必须核对blockHash与logIndex |
摄取算法
- 取得具体区块头,保存 hash、number 与交易数量。
- 优先用区块哈希调用 eth_getBlockReceipts。
- 拒绝 blockHash、blockNumber 或 transactionIndex 不一致的任何一条。
- 抽样调用单交易回执,交叉验证关键字段。
- 把批次标为“已摄取、未最终”,等待业务确认深度。
每条回执包含transactionHash、transactionIndex、blockHash、blockNumber、cumulativeGasUsed、gasUsed、logs与status等核对字段。
数组长度相符只是第一关。索引连续、交易哈希对应、累计 Gas 合理和日志位置一致,才构成整块一致性。失败交易仍会消耗 Gas,也可能带有需要保留的执行语义,不能因 status=0 直接删除整条记录。
一致性测试
| 测试 | 失败动作 |
|---|---|
| 回执数与区块交易数相等 | 整批拒绝,不补空行 |
| transactionIndex 唯一连续 | 保存原响应并停写 |
| 每条 blockHash 等于批次哈希 | 进入重组或节点错误调查 |
| logs 的 blockHash 与索引一致 | 不把事件写入业务表 |
整块回执数组适合批量索引,但调用方仍需按blockHash和transactionIndex校验顺序,并处理重组、null响应和客户端兼容性。
重组演练
索引器在高度 H 第一次看到哈希 A,稍后同高度变为哈希 B。若数据表只以高度作为主键,A 的回执会污染 B。保存 blockHash 并把整批回执绑定到它,才能在重组时撤销旧批次并重新摄取。
数据表需要以批次为单位撤销 A,再写入 B;依赖这些日志的下游统计也必须可重算。只删除表面冲突的一条回执,会留下与新块混合的幽灵数据。
null 与能力分支
- 返回null:区块不存在、不可用或节点不同步,标未知。
- 数量不符:停止写入并核对区块交易列表。
- hash不一致:按重组流程撤销批次。
- 字段一致:进入确认深度等待,不立即永久化。
null 可能表示区块不存在、节点落后或目标方法不可用。先用能力探针和链头状态区分原因;任何空结果都不能回填上一块缓存,也不能伪装成“该块没有交易”。
发布运行手册的退出条件
选一个已知区块,同时用 eth_getBlockReceipts 和逐交易方法采集回执。让复核者比较数组长度、顺序、累计 Gas、日志索引与区块哈希;随后人为替换一条 hash,确认管线会整批拒绝。
第二位操作者随机选择一块,验证所有回执的 blockHash 与索引连续性,并模拟同高度哈希变化,确认旧批次能完整撤销。
批量 RPC 降低请求数,却不会替代最终性策略。不同执行客户端还可能在扩展字段和方法支持上有差异,生产索引器必须先做能力探针和回归样本。
当前未知边界:不同客户端与网络升级对扩展字段支持可能不同,索引器需保留原始响应并在区块最终性策略后确认写入。
eth_getBlockReceipts 规范来源
- Ethereum Execution APIs eth_getBlockReceipts:支撑“eth_getBlockReceipts怎样核对”中的第 1 组字段定义与边界判断;访问于 2026 年 7 月 26 日。
- Ethereum Execution APIs index:支撑“eth_getBlockReceipts怎样核对”中的第 2 组字段定义与边界判断;访问于 2026 年 7 月 26 日。
相关页面 交易回执状态解析、按区块号读取区块、Blob基础费字段。本文只说明索引完整性,不承诺某个确认深度适用于所有业务。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。