VIEW THIS AS

Auto mode follows the Route Engine until you choose a viewpoint.

YOU ARE HERE

ROUTE CHECK

CONNECTED TO

WHAT NEXT

Use the canonical route for this room, or HELP if you are unsure.

区块链历史索引:证明数据集覆盖了所问的问题

Three students in school uniforms work through open books at a classroom table, with textbooks and stationery nearby and study notes on the whiteboard behind them.

English version · 区块链学习导航 · 上一篇

区块链学习 · 文章 BC056

三名学生在教室桌旁一起阅读书本,身边放有课本和文具。
学习场景配图;不代表照片中的学生正在学习区块链。

索引器到达很高区块号,不证明它拥有完整且正确解释的历史。历史答案还依赖起始边界、准确分支、合约与事件筛选、解码器版本、保留数据,以及处理检查点究竟表示什么。

接受分析结果之前,先问一个较窄问题:这份数据集记录的覆盖范围,支持当前这项查询吗?服务可能完整回答短区间,却无法证明更长区间或另一类历史主张。

本篇为虚构目录事件数据集建立覆盖清单。这是设计与证据练习,不运行真实索引任务,不涉及服务商凭证、生产部署或链上写入。

选择适合你的阅读路线

本篇目录

第1至3节定义数据集约定及第一个缺口;第4至7节检查解码覆盖、分支身份和重启证据;第8至10节讨论保留策略与查询受理;练习答案说明如何拒绝过大的历史主张,同时保留有用的部分数据。

关于变更流、重试、刷新可见性和重建索引的一般机制,可阅读增量索引与新鲜度。本篇增加区块链特定问题:数据集实际覆盖哪些已识别历史区块,以及哪些解释规则?

返回目录 · 下一节

1. 宣称拥有历史前,先定义数据集

目标数据集包含虚构链S上合约C发出的指定目录事件。所需区间为高度500至510,包含两端,位于以已识别区块B510结尾的分支上。B499是认可的前驱锚点。

证据包提供正确网络身份、B499至B510的连续区块身份,以及在规定链假设下足以支持目标历史的最终性证据。这是固定历史版本,不是跟踪未定义的动态latest请求。

源数据收集程序取得每个选定区块完整的所需回执,并应用声明的合约和事件筛选。源响应正确、回执取得完整,是题目给定假设。仅收到部分日志通知,不是这里的完整性标准。

数据集承诺支持该范围内的事件历史查询,不承诺完整当前应用状态、S上的全部交易、所有使用类似事件名称的合约,或高度500以前的事件。

这类似于索引配置中网络、合约、ABI、起始区块和处理器声明的作用。The Graph清单文档明确列出这些选择。本篇覆盖文档是原创审阅模型,不是可直接部署的subgraph配置。The Graph:Subgraph清单

返回目录 · 下一节

2. 覆盖清单记录什么

对每个必需区块,清单记录准确身份、父区块身份、取得状态、回执集合完整性、应用筛选、解码规则、派生输出状态,以及持久化完成标记。B500是唯一身份的简称,不只是数字500。

数据集层面记录网络、前驱锚点、目标区块、包含两端的区间、合约范围、事件范围、解码时间表和数据代次标识。应保留未解决缺口列表,不把它们隐藏在单一进度数字后面。

三个进度字段含义不同:

  • 已观察最高区块:已经看到数据的最高高度。
  • 原始覆盖:哪些必需区块具有完整保留的源材料。
  • 可供查询覆盖:哪些区块还具有正确解释,以及针对声明查询已提交的派生结果。

连续可查询前沿从声明起点开始,在第一个未解决区块之前停止,不自动等于已观察最高高度。

清单是服务的证据记录,不会因为名叫manifest就成为密码学证明。各项需要实际收集、验证和存储过程支持。练习会明确给出或不提供这些支持事实。

返回目录 · 下一节

3. 到达510的数据集,仍可能停在504

代次G1对B500–B504及B506–B510具备完整、正确解码且持久提交的覆盖,但缺少B505。所有已覆盖区块都在固定目标分支上,本卡解码条件正确。

所需区间有十一个区块,即510减500再加1。缺口前覆盖五个,缺口后覆盖五个,因此十个必需区块已覆盖,但从500开始的连续可查询前沿为504。

仪表板可以真实写“已观察最高510”,却不能把它翻译成“从500起完整覆盖到510”,因为后者抹去了B505。

按给定假设,G1能提供500–504的完整事件报告,却不能提供500–510的完整报告。它可以明确返回部分报告并指出缺口,但答案范围必须随证据改变。

缺失区块不是空区块。如果完整取得B505,按正确筛选检查,确认没有匹配事件,并完成相应处理,那么已完成的空结果可以补上缺口。没有这些工作,仅因索引里没有行,不能得出同样结论。

返回目录 · 下一节

4. 原始完整不保证语义完整

下一张卡使用独立代次G2。十一个必需区块都有完整原始回执覆盖,但整个数据集都使用解码器V1,而给定解释时间表要求:到B506为止使用V1,从B507起使用V2。

本卡明确规定,V1不适用于相关V2时期事件。不能仅从版本号推断这一点;权威时间表和不兼容性都是题目给定事实。

G2能证明整个区间的原始覆盖,却不能在修复B507–B510解释缺口前,证明500–510事件报告已正确解码。受影响的是四个区块。在其他条件满足时,其连续语义前沿为506。

变更前后继续使用同一个可读事件名称,也不能修复问题。查询约定依赖实际模式与映射规则。反过来,版本变化不自动意味着不兼容;本题明确给出不兼容性,而不是把每个新数字都当作破坏性变更。

The Graph文档把ABI声明、事件处理器和映射代码分开,说明选择记录与解释记录属于不同配置责任。The Graph:ABI与映射声明

为了可靠回答历史问题,应保留哪个解码器用于哪个已识别区块区间。历史解释不同时,单一“当前解码器”字段不够。

返回目录 · 下一节

5. 高度覆盖必须沿着明确分支

另一个清单在500至510每个高度都有完成记录,但高度508的条目属于竞争区块C508,并非目标B510的祖先。行数虽然是十一,数据集却没有覆盖所要求的分支。

修正办法不是把两段历史加在一起。数据集必须区分分支身份,并建立发布约定所需的祖先关系。只用高度作为键,会隐藏这种替换。

以太坊RPC记录提供区块身份及日志上下文字段,有助于保留收集数据的分支上下文,但RPC响应仍有自己的验证假设。以太坊JSON-RPC参考

基本版本固定一个已有给定最终性证据的目标,因此练习不模拟最终确定历史后来发生普通重组。竞争区块卡描述的是相对于所选目标的收集错误。真实服务若发布未最终确定数据,就需另外明确后续分支变化政策。

因此,清单既要说明它代表哪段历史,也要说明如何选定该历史。“所有高度都有记录”只是结构检查,不是完整祖先关系或最终性论证。

返回目录 · 下一节

6. 订阅帮助保持新鲜,不单独完成历史回填

设想工作程序在链已到高度510时才开始监听。收到当前通知,不会自动填充缺失的500–509历史。历史约定仍需明确过去数据来源,以及必需区间已覆盖的证据。

Geth订阅文档说明,通知针对当前而非过去事件,订阅也与连接绑定;文档还描述追赶和重组时新区块头通知的行为。因此,实时通知通道与历史完整性记录应分开。Geth实时事件

本练习中,通知可以提醒收集器可能有新工作,却不能单独证明此前每个区块的所需回执都已收集、筛选和解释。

断线后,可靠历史管线从最后有依据的覆盖点继续,并核对明确区间。具体实现可以不同,但发布主张必须依赖持久证据,而不是最近收到的通知。

这不表示订阅没有用。它解决有价值的通知问题。错误在于要求该机制证明其约定并未提供的另一种性质。

返回目录 · 下一节

7. 检查点必须表示完成,而非尝试

下一张卡关注一个区块的处理边界。处理B505之前,持久化可查询前沿是B504。程序开始读取B505,却在完整派生结果与完成标记提交前崩溃。

按照玩具摄取约定,部分暂存工作不属于可查询数据。重启后,公开前沿仍为B504。程序必须在相同区块身份、筛选和解码规则下核对或重新处理B505,才能宣称它已完成。

约定要求区块的完整派生输出与持久完成标记一致地变为可见。这是明确设计义务,不表示仅写一个检查点文件就实现了原子性。

若进度计数器在所需输出提交前就推进到505,它不能支持覆盖主张。含义只能是“已尝试到505”,不能变成“声明查询完整到505”。发布层不能悄悄替换这两种含义。

因此,数据集记录要保存代次和带分支身份的处理引用。一个整数不能证明查询所见行来自哪套解释规则、哪段源历史。

返回目录 · 下一节

8. 历史事件与历史实体状态是不同产品

不可变事件历史表,与表示应用在过去某区块状态的表,并不是同一数据集。前者可以保留事件记录,后者可能需要带版本的实体状态或受支持的重建过程。

本版本承诺经过筛选的事件历史,没有承诺每个应用变化都发出这些事件。因此,即使声明事件被完整覆盖,也不自动足以重建B510全部应用状态。

同样,保存今天的派生实体状态,不证明旧实体版本仍可查询。The Graph文档说明,剪除历史实体数据会影响时间旅行查询等历史能力。这与索引器是否曾处理某区块,是不同保留选择。The Graph:历史数据保留

如果服务保留或能恢复所需原始数据及解释规则,仍可能重建较早视图。但“在这些条件下能够重建”,不同于“现在就能回答查询”,响应不应隐藏这个区别。

本篇没有提供统一存储时长。真正有用的要求是:保留政策应匹配承诺的历史查询,并为所需数据与转换提供证据。

返回目录 · 下一节

9. 受理查询,或缩小范围

针对给定清单,考虑四项请求。

请求A: B510分支上500–504的全部声明事件。G1可以提供范围明确的完整答案,因为整个区间都可供查询。

请求B: 同一分支500–510的全部声明事件。G1不能提供完整答案,因为B505未解决。它可以拒绝完整性主张,或明确返回带缺口说明的部分结果。

请求C: 按给定历史解码时间表,正确解释500–510事件。即使原始回执完整,只要G2仍在507–510错误使用V1,就不能提供这个答案。

请求D: B510的完整应用状态。两份清单的事件历史承诺,都不能单独建立这项能力。请求需要另一种产品,而题目没有保证选定事件捕获每次状态变化。

这一步查询受理判断,是本篇主要成果。索引的价值在于诚实说明支持哪些问题,不是对每个请求都返回看似合理的表格。

返回目录 · 下一节

10. 随证据一起发布修复后的代次

修复代次G3拥有全部十一个区块完整正确的原始数据、适当解码时间表、与B510一致的祖先关系、持久完成标记,而且没有未解决处理缺口。发布记录准确识别该代次与范围。

只有这些条件成立后,服务才可发布500–510完整事件历史主张。如果修复期间旧代次仍对外可见,应标注其实际覆盖,而不是暗示新代次工作已经到达用户。

发布检查应确认查询端点使用的代次与清单描述相同。正确文件躺在暂存区,不证明公众答案使用它们;反过来,改变公开别名却未同步覆盖记录,也可能让答案来源含糊。

一般重建和切换方法由前面链接的索引基础文章讲解。本篇区块链特定义务,是在发布过程中保留准确链、区块边界、分支和解码上下文。

即使G3也不能证明目录中的链外陈述真实。它的保证针对声明记录及其解释。数据集完整性有价值,却不能替代每种现实问题自己的证据标准。

返回目录 · 下一节

11. 练习与解析

问题1。 500–510包含两端,共需多少区块?G1覆盖多少?

答案。 共需十一。G1覆盖十个:缺失505之前五个,之后五个。

问题2。 G1从500开始的连续可查询前沿是什么?

答案。 B504。最高观察到510不能填补505缺口。

问题3。 原始区块齐全,但507至510错误使用V1,多少区块存在给定语义问题?

答案。 四个。原始完整与语义完整不同。

问题4。 B505完整处理后的零匹配结果,能补上原始与查询覆盖缺口吗?

答案。 能,前提是完整源收集、正确筛选和解码、祖先关系及持久完成都已成立。仅没有数据行不够。

问题5。 B505完整输出与完成标记提交前崩溃,公开前沿能推进到505吗?

答案。 不能。按约定,在所需工作持久成立前仍为B504。

问题6。 完整事件数据集自动回答B510完整应用状态吗?

答案。 不能。题目没有保证事件捕获每次状态变化,也没有提供完整重建程序。

返回目录 · 下一节

12. 常见问题

最高索引区块足以衡量完整性吗?

不够。应检查声明起点、缺口、分支身份、解码覆盖和可查询状态。

缺失区间可以当作没有事件吗?

不能。未扫描区间与完整检查后的空区间,证据不同。

实时订阅能替代历史收集吗?

不能单独替代。不要把通知约定误当完整过去覆盖。

覆盖清单本身证明每一行正确吗?

不证明。它是由收集和处理证据支持的结构化主张,底层验证与源假设仍应清楚可见。

返回目录 · 下一节

资料来源与继续阅读

一手参考资料核查日期为2026年10月12日:

代次、区块区间、解码启用边界和查询受理决定均为原创教学构造,不是对真实索引器完整性的声明。

返回目录