8 ]' l2 V/ X2 R& x& F4 W场景3:无效数据区块 # @. s( i4 s ^. a' U( \) A7 } b4 u9 t, Q) x
对于这个场景,我们考虑这样的情况:大多数客户端有一个错误,会产生无效的块,并且也接受它为有效的--也就是说,当使用同一客户端的其他验证器看到无效的块时,它们将认为它是有效的,从而证明它。 9 l. @, f& o* X3 k8 `9 E, u& g! y1 `& N; U0 i* }& q
让我们调用包含无效区块链A的链,一旦产生无效区块,就会发生两件事: . {, l+ ~8 N3 z9 s) l2 l 8 K6 ~9 a& s d5 A- P- U$ L1. 所有正常工作的客户端都将忽略无效块,而是在生成单独链B的最新有效磁头上构建。所有正常工作的客户端都将投票并在链B上构建。 ( @: D* z3 X" K$ a1 W & A7 b2 W4 a/ n% c2. 故障客户端认为链A和B都有效,因此,它将投票给目前认为最重的两条链中的任何一条。! _; b& H2 j* }* r% t" R
; r2 J. |% X: J5 W 6 ~; T3 X3 {. V* z# l: S J0 o# v& u
我们需要区分三种情况: , w$ h- S! n. D- u& D' n7 H/ V8 g 5 x o& j" D- U+ h. }" @; u* W1. 有漏洞的客户端持有的质押不到总质押的一半。在这种情况下,所有正确的客户端都投票并建立在B链上,最终使其成为最重的链。在这一点上,即使是有错误的客户端也会切换到链B。除了一个或几个孤立的块之外,不会发生任何糟糕的事情。这就是令人欣慰的情况,也是为什么只有多数用户是很棒的原因。: R4 Z4 t( a* n4 H' R
: B5 N4 u) }3 `; o# b2. 有漏洞的客户端持有超过一半但不到三分之二的质押。在本例中,我们将看到正在构建两个链--A由有错误的客户端构建,B由所有其他客户端构建。这两条链都没有三分之二的多数,因此他们无法最终敲定。当这种情况发生时,开发人员将争先恐后地理解为什么会有两条链。当他们发现链A中存在无效块时,他们可以继续修复有错误的客户端。一旦修复,它会将链A识别为无效。因此,它将开始建立在B链的基础上,这将使它能够最终敲定。这对用户来说是非常具有破坏性的。虽然希望哪一条链有效之间的混淆将是短暂的,不到一小时,但链可能在几个小时内甚至一天内都不会最终确定。但对于制片人来说,即使是那些运行有问题的客户端的人,处罚仍然相对较轻。如果他们在构建无效的链A时没有参与链B,他们将受到 “ 非活动泄漏 ” 的惩罚。然而,由于这可能不到一天,我们谈论的惩罚不到1%的质押。 ; ^# G V2 [/ I5 p6 ~+ Y6 e% K6 w c$ e5 }
3. 有问题的客户端持有超过三分之二的质押。在这种情况下,有错误的客户端将不只是构建链A—它实际上将拥有足够的质押来 “终结” 它。请注意,它将是唯一会认为链A已完成的客户端。最终确定的条件之一是链是有效的,而对于所有其他正确操作的客户端来说,链A将无效。然而,由于Casper FFG协议的工作方式,当验证器最终确定链A时,他们永远不能在不被砍掉的情况下参与与A冲突的另一个链,除非该链最终确定(对于任何对细节感兴趣的人,请参阅附录2)。因此,一旦链A被最终确定,运行有错误的客户端的验证器就陷入了可怕的困境:他们已经提交了链A,但链A是无效的。他们不能对B做出贡献,因为它还没有最终敲定。即使是他们的验证器软件的错误修复也帮不了他们-他们已经发送了违规的选票。现在会发生什么是非常痛苦的:尚未敲定的B链将进入二次无活动泄漏。在几周的时间里,违规的验证者将泄露他们的质押,直到损失足够多的质押,以便B再次敲定。假设他们一开始持有70%的质押--那么他们将失去79%的质押,因为这是他们需要损失的金额,才能代表不到总质押的三分之一。在这一点上,链B将再次敲定,所有质押者都可以切换到它。链条将再次恢复健康,但中断将持续数周,数百万ETH在此过程中被摧毁。4 k& w, o, W, ] u
! `4 E0 D, M5 L+ u' @: H& g3 u显然,案例3简直就是一场灾难。这就是为什么我们极其热衷于不让任何客户端持有超过三分之二的质押。那么任何无效的块都不能被最终确定,这永远不会发生。" e' q9 C& s+ c& Q" M% P
0 p& ?: n8 g7 [/ P风险分析. B* j( a0 ?9 f8 H
4 c* ^" {" l* Z) p3 s
那么,我们如何评估这些情景呢?典型的风险分析策略是评估事件发生的可能性(1-极不可能,5-非常可能)以及影响(1-非常低,5-灾难性)。需要关注的最重要风险是那些在两个指标上得分都很高的风险,以影响和可能性的乘积为代表。 . _3 S' g- }* [+ s9 }, h & v4 Y! P3 u8 N6 M5 I ; q% t; Z6 t' D, T2 I+ l4 ^# N# b' i1 Y' w4 I o1 a
考虑到这一点,到目前为止最优先的是情景3。当一个客户端处于三分之二的绝对多数时,影响是相当灾难性的,这也是一个相对可能的情景。为了强调这样的漏洞很容易发生,最近在Kiln Testnet上发生了这样的错误(参见Kiln Testnet阻止提案失败)。在这种情况下,Prysm在提出后确实检测到了积木有缺陷,并且没有证明这一点。如果Prysm认为该阻塞有效,并且这种情况发生在Mainnet上,那么我们处于场景3的情况3中描述的灾难性情况-因为Prysm目前在Mainnet拥有2/3的多数。因此,如果你目前正在运营Prysm,那么你可能会损失所有资金,这是一个非常真实的风险,你应该考虑更换客户端。9 |+ H8 @3 E4 p ?
( V0 }/ Z3 N% p$ M( B1 t
情景1可能是人们最担心的,得到的评级相对较低。这样做的原因是,我认为发生这种情况的可能性相当低,因为我认为Validator客户端软件在所有客户端上都实现得很好,它不太可能生成可倾斜的证明或块。. h0 W6 k I7 O8 U* J+ M9 `( N
4 P- M: z) {9 X* K* K% s
如果我目前运行的是多个客户端,并且我担心切换,我还有什么选择?7 n( F9 D) F# E0 N0 b
# q" t" X6 K. _8 j! Y更换客户端可能是一项重大任务,这也伴随着一些风险。如果斜切数据库未正确迁移到新设置,该怎么办?可能会有被砍掉的风险,这完全违背了目的。. R: `5 P5 O! Z6 h! `
2 q! j- h" N9 \/ {! ^3 ~; E9 C
我会向任何担心这一点的人建议另一种选择。也可以让您的验证器设置保持原样(不需要取出密钥等),并且只切换信标节点。这是非常低的风险,因为只要验证器客户端按预期工作,它就永远不会重复签名,因此不能被砍掉。特别是如果您有大型操作,其中更改验证器客户端(或远程签名者)基础设施将非常昂贵,并且可能需要审核,这可能是一个很好的选择。如果设置的性能不如预期,也可以很容易地切换回原始客户端,或者尝试其他少数客户端。7 N- C& Y' h2 H3 N" h8 p
' Q0 d# m: p6 u) J" e
好消息是,在切换信标节点时,您几乎不用担心:它对您造成的最坏影响就是暂时脱机。这是因为信标节点本身永远不能自己产生可切削消息。如果您运行的是少数派客户端,则不可能最终进入场景3,因为即使您投票支持无效的区块,该区块也不会获得足够的票数来最终确定。 1 e$ a7 F; v( z: @2 \8 g3 V4 V 3 `% Y2 Q+ O7 x6 ?- }8 i那被惩罚客户端的呢?; B. Z d2 o$ j3 I& `) j5 p3 z