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

索引器到达很高区块号,不证明它拥有完整且正确解释的历史。历史答案还依赖起始边界、准确分支、合约与事件筛选、解码器版本、保留数据,以及处理检查点究竟表示什么。
接受分析结果之前,先问一个较窄问题:这份数据集记录的覆盖范围,支持当前这项查询吗?服务可能完整回答短区间,却无法证明更长区间或另一类历史主张。
本篇为虚构目录事件数据集建立覆盖清单。这是设计与证据练习,不运行真实索引任务,不涉及服务商凭证、生产部署或链上写入。
选择适合你的阅读路线
本篇目录
- 1. 宣称拥有历史前,先定义数据集
- 2. 覆盖清单记录什么
- 3. 到达510的数据集,仍可能停在504
- 4. 原始完整不保证语义完整
- 5. 高度覆盖必须沿着明确分支
- 6. 订阅帮助保持新鲜,不单独完成历史回填
- 7. 检查点必须表示完成,而非尝试
- 8. 历史事件与历史实体状态是不同产品
- 9. 受理查询,或缩小范围
- 10. 随证据一起发布修复后的代次
- 11. 练习与解析
- 12. 常见问题
- 资料来源与继续阅读
第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日:
- Geth实时事件,最后编辑于2023年8月16日,仅使用当前通知与连接限制。
- 以太坊JSON-RPC参考,用于区块与日志上下文。
- The Graph Subgraph清单,用于声明来源、ABI与映射选择,以及历史实体保留。
代次、区块区间、解码启用边界和查询受理决定均为原创教学构造,不是对真实索引器完整性的声明。
