5 b$ {' C" u |" h R' ?& [% q1. 纪元0是对齐的。 / a* V) `% ~$ o0 U+ X/ l ; L; T+ C/ V; w6 B- f2. 如果与一个合理的纪元有绝对多数的联系,那么一个纪元就是合理的。 - j* w+ n* T' [! M2 w* t1 W' P, F1 ^0 q+ V& P( s
3. 如果(1)纪元X是对齐的,并且(2)下一个纪元也是对齐的,且绝大多数链接的源是纪元X,则纪元X被最终确定。 ; f7 J' k! \' V/ f* }( p1 N* H: ` V- _" N! Y$ M* F! I
规则3略有简化(有更多的条件可以最终确定一个纪元,但它们对本讨论并不重要)。现在,让我们来看看大幅削减的条件。大幅削减证明有两条规则。两者都比较一对证明V和W:- R1 t, E5 n8 j1 P$ M& J9 W7 z
6 Y& i4 \9 a4 c
1. 如果V和W的目标是相同的纪元(即相同的高度),但它们不投票给相同的检查点(双重投票),则它们是可以砍掉的。3 z+ o2 k3 _5 e
/ ^$ w- D' L. ^1 ]! F* l$ G: V8 z: ]
2. 这意味着(1)V的源早于W的源和(2)V的目标晚于W的目标(环绕投票)。; W6 t& H O( z6 ]6 c6 S
]" [' D1 G( a# n4 Z: Q第一个条件是显而易见的:它防止简单地投票给同一高度的两个不同的链。但是第二个条件有什么作用呢?6 ^- F" w/ t3 N
* i' M) `9 a* w6 g/ Y* N1 \. b它的功能是削减参与最终确定两个冲突链的所有验证器(这永远不应该发生)。要了解原因,让我们再次查看我们的场景3,在最糟糕的情况下,有错误的客户端占绝对多数(>2/3的质押)。当它继续投票给有故障的链时,它将最终确定具有无效块的纪元,如下所示:. k% O: t1 z4 w: I1 D9 ]+ E
4 t, k w6 \6 U, { n: J9 v% ~/ f
* R8 I% M. Z: d/ n) j; Q
这张图片中的圆角方框代表的是纪元,而不是区块。绿色箭头是所有验证器创建的最后一个超级多数链接。红色箭头是仅由有错误的客户端支持的超级多数链接。正常工作的客户端忽略带有无效区块(红色)纪元。第一个红色箭头将证明无效的纪元是正确的,第二个箭头将确定无效纪元。7 |3 r6 a) ?6 l" W5 Q, S0 C+ o
' F. _0 f9 E: U, P0 W" n4 h
现在让我们假设错误已经修复,并且最终确定无效纪元的验证器想要重新加入正确的链B。为了能够终止链,第一步是调整纪元X:9 {5 U. ^& R! e# Z B9 \) C
# I! W0 F: F, g$ Z. a+ i& t* S3 J4 Z5 I: G5 w- y
& ]" p0 b8 B) W0 {; G然而,为了参与纪元X的调整(它需要一个由虚线绿色箭头指示的绝对多数链接),他们将不得不“跳过”第二个红色箭头--那个最终确定无效纪元的箭头。投票支持这两个链接是一种可以砍掉的进攻。) ]- ]* \8 ?. Y8 @; x s) N0 g