1 W7 i# I9 U1 v6 w$ [! E验证器失败的另一种方式是离线,同样,这是有惩罚的,但其机制非常不同。我们不称之为削减,而且通常很小:在正常操作下,离线的验证器受到的惩罚与他们在完全验证时将获得的惩罚相同。在撰写本文时,这是每年4.8%的增长率。如果您的验证器有几个小时或几天处于离线状态,例如由于临时的互联网中断,那么可能不值得出一身冷汗。$ |% m* F/ K' n' G+ _
?* ]0 f. Z& _2 v) H) Q1 G
当超过1/3的验证器处于离线状态时,情况会变得非常不同。然后,信标链无法最终敲定,这威胁到协商一致议定书的一个基本属性,即活跃性。 / k" P' t* q1 x5 z7 G0 o/ p4 x. p$ o4 F3 A: n# \* }
为了在这样的情况下恢复活力,所谓的 “ 二次无活动泄漏 ” 开始发挥作用。如果验证器在链未完成时继续脱机,则总罚款额随时间呈二次曲线上升。最初是非常低的;大约4.5天后,离线验证者将失去1%的质押。然而,它在~10天后增加到5%,在~21天后增加到20%(这是Altair 的值,未来将翻一番)。 $ v9 W! N, V$ o/ d % u, z, w8 ]5 s) p/ ? ( X/ E( [0 }: T# J- \3 d0 U6 w6 r) h
该机制的设计是为了在发生导致大量验证器操作失效的灾难性事件的情况下,链最终能够再次完成。随着离线验证器失去越来越多的质押,他们在总质押中的份额将越来越小,当他们的质押降至1/3以下时,剩余的在线验证器获得所需的2/3多数,从而使他们能够最终确定链。 " H3 ]: O1 G6 v8 a5 u) a2 [ - _# ~' P& v. Z* |然而,还有另一种情况与此相关:在某些情况下,验证器不能再投票给有效链,因为它们意外地将自己锁定在无效链中,下面是关于这一点的更多信息。 8 H- ^: c4 N. m2 B a/ D. \* Z5 E+ t' g运行多数用户端有多糟糕?& M2 o5 A' i+ s. D4 ?
& N' F! n' _0 W: t# V6 X- u+ X
为了了解危险是什么,让我们来看看三种失败类型:' _; U5 x3 f* s6 q4 r
+ d6 E5 D: H$ {# v. ?0 C
1. 大规模削减事件:由于错误,大多数客户端验证器签署了可大幅削减的证明。* ?2 x2 z+ h9 K5 f( g7 Z
+ y" G. Y# W9 \7 J* k& [- p2. 大量离线事件:由于错误,所有多数客户端验证器都离线。 : {( V' e6 h* K7 l- v 6 `5 W1 d% i( J) e. G$ Z. |4 X3. 无效区块事件:由于错误,多数用户端验证器都证明存在无效块。 3 C7 |8 B% \8 G 0 l+ y' L7 \/ A( Z: f' e还可能发生其他类型的大规模失败和砍杀,但我仅限于与客户端错误相关的错误(在选择运行哪个客户端时应该考虑这些错误)。4 v. Q0 z% b% F6 K
2 O, g# v/ F ~" c' }1 S' u8 q场景1:双重签名- g( K# i8 l" g- B; g6 x& B
# f5 l l. G! O! a# V5 P$ W
这可能是大多数验证器操作员最害怕的场景:导致验证器客户端签署可删除证明的错误。一个例子是两个证明人投票给相同的目标时期,但具有不同的有效负载。因为这是一个客户端错误,所以关注的不只是一个质押者,而是运行这个特定客户端的所有质押者。一旦发现这些含糊其辞行为,这将是一场大屠杀:所有相关的质押者都将失去100%的质押资金。这是因为我们正在考虑多个客户端:如果相关客户端的质押比例只有10%,那么“只有”20%的质押比例将被削减(在Altair;30%,并设定最终的处罚参数)。 0 ?- u! p2 Z0 D- I2 W, c6 J# |7 X9 l& j/ c6 {
在这种情况下,损害显然是极端的,但我也认为极不可能。可删除证明的条件很简单,这就是为什么构建验证器客户端(VCs)来强制执行它们的原因。验证器客户端是一个很小的、经过良好审核的软件,这种规模的漏洞不太可能出现。# W/ B2 l& A0 _/ g
9 r* _* L0 ^" L6 G
到目前为止,我们已经看到了一些削减,但据我所知,所有这些都是由于操作员故障-几乎所有这些都是由于操作员在几个位置运行相同的验证器造成的。由于这些都不相关,因此削减的金额很小。 / z* n, ]# a0 A7 g& F1 _: A* _/ F# ?6 H" o9 @$ m
场景2:大规模离线活动: j( M. b0 }: j: r
% k z0 v( L8 Z: b/ v6 R2 `- E. G对于此场景,我们假设大多数客户端有一个错误,当触发该错误时,会导致客户端崩溃。有问题的块已经被集成到链中,每当客户端遇到该块时,它就会离线,从而无法进一步参与协商。大多数客户端现在处于离线状态,因此开始出现非活动泄漏。 & B2 l* t0 y: @1 ]. s: F3 B8 q- A8 k/ i. c$ _. M3 |4 D2 t
客户端开发人员将争先恐后地将一切重新组合在一起。现实地说,在几个小时内,最多几天,他们将发布一个错误修复程序,以消除崩溃。4 E; K- q2 q4 D$ m
+ f% i) Y+ R# c- F
与此同时,订货商也可以选择简单地切换到另一个客户端。只要这样做足以让超过2/3的验证器在线,二次无活动泄漏就会停止。在有错误的客户端得到修复之前,这并不是不可能发生。* \. a U; m: G, x" _
* n. X1 b) ~2 x. _这种情况并不是不可能(导致崩溃的错误是最常见的类型之一),但总的惩罚可能不到受影响质押的1%。; o u8 P/ Q+ { o
. a- ]) s* z1 n6 T7 R1 S
场景3:无效数据区块 8 b ?% t, v8 Z( U & i3 K; @# B3 l# w( n% C* p对于这个场景,我们考虑这样的情况:大多数客户端有一个错误,会产生无效的块,并且也接受它为有效的--也就是说,当使用同一客户端的其他验证器看到无效的块时,它们将认为它是有效的,从而证明它。 + o1 I- o7 A. P/ _& V+ F* Q/ _( I o' P" P$ N$ y; p$ D让我们调用包含无效区块链A的链,一旦产生无效区块,就会发生两件事: 3 w. S3 F/ }) O% w @/ j* \+ M, k ; c8 C7 f; R' i5 |* t1. 所有正常工作的客户端都将忽略无效块,而是在生成单独链B的最新有效磁头上构建。所有正常工作的客户端都将投票并在链B上构建。 : e0 Q$ j6 ]4 q4 a# J1 D e2 I* d2 }- I
2. 故障客户端认为链A和B都有效,因此,它将投票给目前认为最重的两条链中的任何一条。 2 c2 b9 \5 |) q* N: I $ ?0 d9 e& b9 u6 b; { ; ]5 t% c( r( }" x j$ K# `. R 4 a' N3 Y% f# y& h我们需要区分三种情况: ) {7 w0 K1 V; ~; ? @ e5 |2 E! }. I" ]; d+ t/ I9 ^
1. 有漏洞的客户端持有的质押不到总质押的一半。在这种情况下,所有正确的客户端都投票并建立在B链上,最终使其成为最重的链。在这一点上,即使是有错误的客户端也会切换到链B。除了一个或几个孤立的块之外,不会发生任何糟糕的事情。这就是令人欣慰的情况,也是为什么只有多数用户是很棒的原因。 ( [* b( B; K! ~/ y, p2 K2 l8 V( q
2. 有漏洞的客户端持有超过一半但不到三分之二的质押。在本例中,我们将看到正在构建两个链--A由有错误的客户端构建,B由所有其他客户端构建。这两条链都没有三分之二的多数,因此他们无法最终敲定。当这种情况发生时,开发人员将争先恐后地理解为什么会有两条链。当他们发现链A中存在无效块时,他们可以继续修复有错误的客户端。一旦修复,它会将链A识别为无效。因此,它将开始建立在B链的基础上,这将使它能够最终敲定。这对用户来说是非常具有破坏性的。虽然希望哪一条链有效之间的混淆将是短暂的,不到一小时,但链可能在几个小时内甚至一天内都不会最终确定。但对于制片人来说,即使是那些运行有问题的客户端的人,处罚仍然相对较轻。如果他们在构建无效的链A时没有参与链B,他们将受到 “ 非活动泄漏 ” 的惩罚。然而,由于这可能不到一天,我们谈论的惩罚不到1%的质押。- l+ V9 l/ {) t6 v/ l
$ l4 w4 j3 S& F9 ?, m2 n2 x3. 有问题的客户端持有超过三分之二的质押。在这种情况下,有错误的客户端将不只是构建链A—它实际上将拥有足够的质押来 “终结” 它。请注意,它将是唯一会认为链A已完成的客户端。最终确定的条件之一是链是有效的,而对于所有其他正确操作的客户端来说,链A将无效。然而,由于Casper FFG协议的工作方式,当验证器最终确定链A时,他们永远不能在不被砍掉的情况下参与与A冲突的另一个链,除非该链最终确定(对于任何对细节感兴趣的人,请参阅附录2)。因此,一旦链A被最终确定,运行有错误的客户端的验证器就陷入了可怕的困境:他们已经提交了链A,但链A是无效的。他们不能对B做出贡献,因为它还没有最终敲定。即使是他们的验证器软件的错误修复也帮不了他们-他们已经发送了违规的选票。现在会发生什么是非常痛苦的:尚未敲定的B链将进入二次无活动泄漏。在几周的时间里,违规的验证者将泄露他们的质押,直到损失足够多的质押,以便B再次敲定。假设他们一开始持有70%的质押--那么他们将失去79%的质押,因为这是他们需要损失的金额,才能代表不到总质押的三分之一。在这一点上,链B将再次敲定,所有质押者都可以切换到它。链条将再次恢复健康,但中断将持续数周,数百万ETH在此过程中被摧毁。 $ Q6 y- N, m6 f. e- ^+ R% Z$ u1 o , }) A) t+ X, V显然,案例3简直就是一场灾难。这就是为什么我们极其热衷于不让任何客户端持有超过三分之二的质押。那么任何无效的块都不能被最终确定,这永远不会发生。, t( R! i! Q( {. j
; s. W0 I7 y" U0 ?' j$ t0 O
风险分析9 m C0 z2 }, L5 G* j: B+ S
+ ^ P/ M6 [; T" Q1 ~2 z* E4 k那么,我们如何评估这些情景呢?典型的风险分析策略是评估事件发生的可能性(1-极不可能,5-非常可能)以及影响(1-非常低,5-灾难性)。需要关注的最重要风险是那些在两个指标上得分都很高的风险,以影响和可能性的乘积为代表。 & V s/ J: z: l8 R h3 @& l( Z* o, I" b9 n, L# ~; `) \# E. @* p
$ o/ d( o* T' @1 Y2 n& b; r% {
/ E; j( d- q' o4 b3 M! |考虑到这一点,到目前为止最优先的是情景3。当一个客户端处于三分之二的绝对多数时,影响是相当灾难性的,这也是一个相对可能的情景。为了强调这样的漏洞很容易发生,最近在Kiln Testnet上发生了这样的错误(参见Kiln Testnet阻止提案失败)。在这种情况下,Prysm在提出后确实检测到了积木有缺陷,并且没有证明这一点。如果Prysm认为该阻塞有效,并且这种情况发生在Mainnet上,那么我们处于场景3的情况3中描述的灾难性情况-因为Prysm目前在Mainnet拥有2/3的多数。因此,如果你目前正在运营Prysm,那么你可能会损失所有资金,这是一个非常真实的风险,你应该考虑更换客户端。/ f6 K, r [* q" }2 [5 ~
\- P, D$ O: `) z
情景1可能是人们最担心的,得到的评级相对较低。这样做的原因是,我认为发生这种情况的可能性相当低,因为我认为Validator客户端软件在所有客户端上都实现得很好,它不太可能生成可倾斜的证明或块。 ' j9 L9 x5 s6 [/ U) ^. C4 Z- @- I, u& H h% v
如果我目前运行的是多个客户端,并且我担心切换,我还有什么选择?/ I5 i! P! i) v7 h9 W( M$ Y& y
) W5 s3 i4 k& P6 i6 Y6 S x: ~更换客户端可能是一项重大任务,这也伴随着一些风险。如果斜切数据库未正确迁移到新设置,该怎么办?可能会有被砍掉的风险,这完全违背了目的。+ v/ N: j1 o' r0 t6 i: H
e. r9 _* S' G. T" l/ e9 _我会向任何担心这一点的人建议另一种选择。也可以让您的验证器设置保持原样(不需要取出密钥等),并且只切换信标节点。这是非常低的风险,因为只要验证器客户端按预期工作,它就永远不会重复签名,因此不能被砍掉。特别是如果您有大型操作,其中更改验证器客户端(或远程签名者)基础设施将非常昂贵,并且可能需要审核,这可能是一个很好的选择。如果设置的性能不如预期,也可以很容易地切换回原始客户端,或者尝试其他少数客户端。2 p7 { Q( W3 v J4 k8 L+ l
3 W" v w% l2 c' d6 o它的功能是削减参与最终确定两个冲突链的所有验证器(这永远不应该发生)。要了解原因,让我们再次查看我们的场景3,在最糟糕的情况下,有错误的客户端占绝对多数(>2/3的质押)。当它继续投票给有故障的链时,它将最终确定具有无效块的纪元,如下所示:) Z5 @& ^6 `: n* y5 L
3 e5 @% h8 o- D4 v* E: N. G
0 H, ?/ l8 J0 [. p 3 {* N, f7 h: [: b; y! I: I( O这张图片中的圆角方框代表的是纪元,而不是区块。绿色箭头是所有验证器创建的最后一个超级多数链接。红色箭头是仅由有错误的客户端支持的超级多数链接。正常工作的客户端忽略带有无效区块(红色)纪元。第一个红色箭头将证明无效的纪元是正确的,第二个箭头将确定无效纪元。 d) n( s/ t3 x$ T0 f$ @5 c, _# h 2 N* K" _- l8 b7 ~, `: F现在让我们假设错误已经修复,并且最终确定无效纪元的验证器想要重新加入正确的链B。为了能够终止链,第一步是调整纪元X: ) c% p) I3 ~7 [7 f' y/ G + G) v [0 w9 ? 9 F# F3 @4 P0 G: E * ]! a3 \3 {& _8 a$ f1 b, h然而,为了参与纪元X的调整(它需要一个由虚线绿色箭头指示的绝对多数链接),他们将不得不“跳过”第二个红色箭头--那个最终确定无效纪元的箭头。投票支持这两个链接是一种可以砍掉的进攻。 6 i2 r9 _- m0 I9 j( x7 r! ?3 @ U" `- m. X! Y2 O+ }! h
对于任何后来的时代来说,这一点都将继续适用。修复它的唯一方法是通过二次无活动泄漏:随着链B的增长,锁定的验证器将泄漏他们的资金,直到链B可以被正常工作的客户端证明合理并最终确定为止。7 Y. H. I$ |! N
) m; z S1 g T1 E& r; {! a- q# _