5 I. Z# B, k! ~那么,为什么Etherum的目标是成为多客户端?客户端是非常复杂的代码片段,很可能包含错误。其中最糟糕的是所谓的“共识错误”,即区块链核心状态转换逻辑中的错误。一个经常被引用的例子是所谓的“无限货币供应”漏洞,在这个漏洞中,有漏洞的客户端接受打印任意数量的以太的交易。如果有人发现了这样的漏洞,但在他们到达出口之前没有被阻止(即通过混合器或交易所来利用资金),这将导致Ether的价值大幅崩溃。8 ]) F# _8 R; A, ^* B
) L% V7 q9 c3 y0 a) v. W如果每个人都运行相同的客户端,停止需要人工干预,因为链、所有智能合约和交易所都将照常运行。即使是几分钟的时间也足以执行一次成功的攻击,并充分分散资金,使其不可能只回滚攻击者的交易。根据打印的ETH数量,社区可能会协调将链回滚到利用漏洞之前(在识别并修复错误之后)。1 o+ x( D- T$ L/ P
) w$ W n8 Q7 c; n) D8 P现在,让我们来看看当我们有多个客户端时会发生什么。有两种可能的情况: 2 j& ~2 Y/ h! k$ l0 V0 t. b' y9 E ! B. t) A, }9 T% l* k1. 有漏洞的客户端只占不到50%的质押份额,客户端将使用利用该错误的事务生成一个块,打印ETH,让我们称这条链为A。 * G! U) s, ]5 S ; d6 E% R7 h" g0 c然而,运行无故障客户端的大多数质押将忽略此块,因为它是无效的(对他们来说,打印ETH操作就是无效的)。它们将构建不包含无效块的备用链B。 + U6 j1 |3 @, W: `& B# u. L. i( F/ g9 W- H" B7 } R% ~
由于正确的客户端占多数,B链将积累更多的证明。因此,即使是有问题的客户端也会投票给链B;结果就是链B将积累100%的选票,链A将死亡。链条将继续,就像错误从未发生过一样。& Q% }' p( A5 M* w! g8 C+ {/ j
' P3 k# w4 K2 n% `8 j* I
2. 大部分质押份额使用的是有问题的用户端,在这种情况下,链A将积累多数选票。但是,由于B拥有不到50%的所有证明,违规的客户端将永远看不到从链A切换到链B的理由。因此,我们将看到链分裂。 5 w5 g9 U* w& L, V/ x) [* n$ ?3 ^ 8 L) `/ E. [" a' o! x0 E( V; y3 r0 o8 V
; k5 _& H" Z2 K9 Y: K$ ^情况 1 是最理想的情况。因为这很可能会导致一个孤立的块,而大多数用户甚至都不会注意到。开发人员则可以调试客户端,修复错误,一切安好。相反,案例 2 显然不那么理想。但仍然比只有一个客户端的情况要好--大多数人会很快检测到链条分裂(您可以通过运行多个客户端自动完成这一点),交易所会迅速暂停存款,Defi用户可以在分裂解决时谨慎行事。基本上,与单客户端体系结构相比,这仍然给我们提供了一个闪烁的红色警示灯,从而免受最坏结果的影响。; v, j* E$ {# [+ }' V
3 C, E- G' C1 Z# @9 y
如果有错误的客户端由超过2/3的质押运行,情况2将会更糟。在这种情况下,它将最终确定无效的链。稍后会详细介绍这一点。 - z7 b) a2 E* ~: _4 H! G / J+ p- x5 C$ G9 e一些人认为链分裂是如此灾难性,以至于它本身就是单客户端体系结构的一个论点。但请注意,链分裂只是因为客户端中的错误而发生的。对于单个客户端,如果您希望修复此问题并将链恢复到原来的状态,则必须回滚到错误发生之前的块-这与链分裂一样糟糕!因此,尽管链拆分听起来很糟糕,但在客户端存在关键错误的情况下,它实际上是一个功能,而不是一个错误。至少你可以看到有些地方出了严重的问题。3 s g0 v3 r9 @, \9 N
' {0 i3 N+ S& ]: a# L8 B c W7 d激励客户端多样性:反相关性惩罚 % l- Q$ E% V3 V- G, p4 I% x+ j$ b& K# t" z
如果质押分散在多个客户端,最好的情况是每个客户端拥有不到总质押的三分之一,这显然对网络有利。这将使其对任何单个客户端中的错误具有弹性。但质押者为什么会在乎呢?如果网络没有任何激励措施,他们就不太可能承担转向少数派客户端的成本。 / r0 t# i- S6 D2 t* M, J. K _* ] Z
不幸的是,我们不能让奖励直接依赖于验证器运行的客户端。没有不能被欺骗的客观方法来衡量这一点。 " `* a# z, P6 Q- z7 \8 i7 u4 d' @( J( }' m- v8 H
然而,当您的客户端有错误时,您无法隐藏。这就是反相关惩罚的用武之地:其思想是,如果您的验证器做了一些不好的事情,那么如果更多的验证器几乎在同一时间犯了错误,那么惩罚就会更高。换句话说,你会因为相关的失败而受到惩罚。7 Y" h# ]( p4 ^9 k
! D+ m& w" \/ B ]
在以太,你目前可能会因为两种行为而被砍掉: ! W) `+ r. R: v5 ~' U$ q; ^ " |, |9 B/ v4 g2 |4 b1. 在相同高度的两个区块上签名。& \! k8 ^0 a$ D0 ^, }6 S
; G; t0 v( M5 L! W" A
2. 创建一对可删减的证明(环绕投票或双倍投票)。1 d% d6 D* f% F7 P2 W7 L3 j
: K9 \ f7 t7 n& E8 Z) y5 Z当你被大幅削减时,你通常不会失去所有的资金。在撰写本文时(Altair Fork),默认惩罚实际上非常小:您只会损失0.5ETH,或您所赌注的以太的1.5%(最终将增加到1ETH或3%)。 + G+ H t( S( x$ D 9 {" s/ I) W, |' I然而,有一个问题:还有一个额外的惩罚,它取决于在您的验证器被砍掉之前和之后的4096个时期(18天)内发生的所有其他砍掉。你被进一步处罚的金额与这段时间内被削减的总金额成比例。 ( e2 z% R& H5 w. b& _+ f0 A; F* Q/ T% J! x2 B) I1 J: f6 Z, \
这可能是比最初的惩罚要大得多的惩罚,目前(Altair 分叉)它的设置是,如果超过一半的全部质押余额在这段时间内被削减,那么你将失去所有的资金。最终,这将被设置为:如果其他验证者的1/3被砍掉,您将失去所有质押。之所以选择1/3,是因为产生共识失败而必须模棱两可的最小权益数量。 % I: P3 z& c0 F& W0 y. m: f% X( n# I. f0 F
4 @* S1 m$ v2 E4 X3 n6 c
6 o, w! |' z P9 ^# n另一个反相关性惩罚:二次无活动泄漏1 Z" E6 a7 k& j4 ]0 l
2 @. T6 t0 @; T2 ~7 y. {9 l. v9 j3 U第一个条件是显而易见的:它防止简单地投票给同一高度的两个不同的链。但是第二个条件有什么作用呢?& b) a$ Y% m3 T! c
7 {4 ^8 @4 g8 i9 q
它的功能是削减参与最终确定两个冲突链的所有验证器(这永远不应该发生)。要了解原因,让我们再次查看我们的场景3,在最糟糕的情况下,有错误的客户端占绝对多数(>2/3的质押)。当它继续投票给有故障的链时,它将最终确定具有无效块的纪元,如下所示: W b; O9 b; R G. U4 D