eth_getBlockReceipts怎样核对? 图 1
eth_getBlockReceipts怎样核对? · 图 1

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

摄取算法

  1. 取得具体区块头,保存 hash、number 与交易数量。
  2. 优先用区块哈希调用 eth_getBlockReceipts。
  3. 拒绝 blockHash、blockNumber 或 transactionIndex 不一致的任何一条。
  4. 抽样调用单交易回执,交叉验证关键字段。
  5. 把批次标为“已摄取、未最终”,等待业务确认深度。

每条回执包含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 规范来源

  1. Ethereum Execution APIs eth_getBlockReceipts:支撑“eth_getBlockReceipts怎样核对”中的第 1 组字段定义与边界判断;访问于 2026 年 7 月 26 日。
  2. Ethereum Execution APIs index:支撑“eth_getBlockReceipts怎样核对”中的第 2 组字段定义与边界判断;访问于 2026 年 7 月 26 日。

相关页面 交易回执状态解析按区块号读取区块Blob基础费字段。本文只说明索引完整性,不承诺某个确认深度适用于所有业务。