--- title: 时钟验证(Tick Verification) --- 这样可以设计插槽中的刻度线的标准和验证。 它还描述了错误处理和罚没条件,包括系统如何处理不满足这些要求的传输。 # 插槽结构 每个插槽必须包含一个预期的`ticks_per_slot`滴答次数。 插槽中的最后一个碎片必须仅包含最后一次滴答,而不能包含其他任何内容。 领导者还必须用`LAST_SHRED_IN_SLOT`标志标记包含最后一次滴答的碎片。 在滴答之间,必须有`hashes_per_tick`个哈希值。 # 处理不良传播 恶意传输`T`的处理方式有两种: 1. 如果领导者可以为同一个插槽生成一些错误的传输`T`以及一些替代传输`T‘`,而不会违反重复传输的任何罚没规则(例如,如果`T‘`是`T`的子集),则群集必须处理两种传输均处于活动状态的可能性。 因此,这意味着我们无法将错误的传输`T`标记为已死,因为集群可能已就`T‘`达成共识。 这些案件需要严厉的证据来惩治这种不良行为。 2. 否则,我们可以简单地将插槽标记为已死且无法播放。 根据可行性,罚没可能是必要的,也可能不是必要的。 # Blockstore 接收碎片 当 blockstore 收到一个新的碎片`s`,有两个实例: 1. 将`s`标记为`LAST_SHRED_IN_SLOT`,然后检查该存储区中是否存在用于此插槽的碎片`s‘`,其中`s'.index > s.index`。如果是,则将`s`和`s‘`一起构成罚没的证明。 2. Blockstore已经收到一个标记为`LAST_SHRED_IN_SLOT`的带有索引`i`的碎片`s'`。 如果`s.index > i`,则`s`和`s'`一起构成一个罚没证明。 在这种情况下,blockstore也不会插入`s`。 3. 相同索引的重复碎片将被忽略。 相同索引的不可重复的碎片是一个可罚没的条件。 有关这种情况的详细信息,请参见`领导者重复区块罚没`章节。 # 重播和验证滴答 1. 重播阶段的重播来自blockstore的条目,它跟踪每个插槽中已观察到的滴答数量,并确认在各个标记之间有`hashes_per_tick`个哈希值。 在播放完最后一个碎片的滴答之后,重播阶段会检查滴答的总数。 失败场景1:如果有两个连续的滴答,其间的哈希数为`!=Hashes_per_tick`,则将此插槽标记为无效。 失败情况2:如果滴答数量等于 != `ticks_per_slot`,则将插槽标记为无效。 失败情况3:如果滴答的数量达到`ticks_per_slot`,但我们仍未看到`LAST_SHRED_IN_SLOT`,则将此插槽标记为无效。 2. 当ReplayStage达到标记为最后一个碎片时,它将检查这个碎片是否为一次滴答。 失败情况:如果带有`LAST_SHRED_IN_SLOT`标志的带符号碎片无法反序列化为滴答(无法反序列化或反序列化为条目),则将此插槽标记为无效。