跳到正文
← 使用教程

Quicknode eth_getLogs 超限:切分区块并检查重组日志

链小知 · 进阶 · 核验 · 依官方文档整理

以已有 Ethereum 日志查询为输入,核对套餐范围限制、互斥过滤器和连续区块切片,得到可复核的重查计划。

开始前准备

  • 准备 Ethereum endpoint 的脱敏请求、错误记录、套餐及目标固定起止区块号。
  • 准备目标合约完整地址与有顺序的 topics;如果依据 blockHash 查询,另准备对应完整区块哈希。

1. 区分认证失败与范围错误

先查看 HTTP 状态及 JSON-RPC code/message。核对已有 endpoint 的 token 在 URL 或 x-token header,是否被重新生成或受白名单影响。eth_getLogs 的范围提示与认证错误分别处理;认证未通过时,切分区块也不能证明问题已解决。

检查结果:已定位认证、参数、范围或限流中的实际错误类别,凭据被遮盖。

2. 把过滤条件固定下来

以完整合约地址和 ordered topics 确定要查的事件。fromBlock/toBlock 使用固定十六进制高度,避免分页时 latest 随链头改变。如果选择 blockHash,就删除 fromBlock 和 toBlock;它们不能同用。topics 的位置有含义,不按任意集合重排。

检查结果:过滤对象只有区块范围或 blockHash 一种定位方式,合约和 topics 不变。

3. 按实际套餐规划连续切片

当前 Ethereum 方法文档列 Free Trial 5 区块、付费 10,000 区块。先记录自己的限制 L,再令每片 [a,b] 的含首尾数量 b-a+1 不超过 L,下一片从 b+1 开始。例如示意 L=5、目标十进制 100–111,切成 100–104、105–109、110–111,实际请求再编码为十六进制。L 属于当期服务限制,升级或换链后重核。

检查结果:所有切片连续、没有缺口或重复边界,每片含首尾数量不超过账户限制。

4. 核对各片返回与 removed

逐片在既有返回中记录是否有 error、实际区块范围和日志数量。空数组只说明该成功查询没匹配日志;失败片不能计为空结果。保存 blockHash、transactionHash、logIndex 及 removed;removed=true 表示链重组撤销该日志,不能继续计入有效事件。若重查同一片,用完整日志标识避免重复计数,并保留重组修正。

检查结果:每片成功/失败分明,日志均可追溯到区块和索引,撤销标志未丢失。

5. 输出完整性与后续核查范围

汇总已取得成功结果的切片、缺失切片、过滤条件和区块状态。API credits 依链和方法计算,拆片会改变调用数,应按当前套餐与 RPS 评估后续读取。日志覆盖完成也不单独证明最终性,必要时按固定区块和确认口径复核;只输出重查计划,不自动执行所有片。

检查结果:完整范围、缺失区间、重组修正与服务用量可复核。

怎样确认完成

  • 得到可核对的过滤器和连续区块计划,已读结果与尚缺结果分开,removed 事件可追踪。
  • 仅文档核验和既有记录排查,未执行认证 RPC 请求或批量抓取。

常见错误与边界

  • 试用 5 区块与付费 10,000 区块是本次 Ethereum 文档所列范围,不应推导其他链。
  • 把失败片当空数组会造成静默漏事件。
  • 连续分页使用 latest 会失去固定数据边界。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据