标题: 以太坊合并:请自行承担运行多个客户端的后果! [打印本页] 作者: lzqandly 时间: 2022-5-31 23:43 标题: 以太坊合并:请自行承担运行多个客户端的后果! 出于安全性和活跃性的考虑,Etherum选择了多客户端架构。为了鼓励质押者将他们的设置多样化,对相关的失败处罚更高。所以,运行少数客户端的质押者通常只会在客户端出现错误的情况下损失适度的金额,但运行多个客户端可能会导致全盘亏损。因此,负责任的质押者应该着眼于客户端环境,而选择一个不太受欢迎的客户端。 8 i. `* h4 i& L3 m* o+ D7 S: F% Y% ], i* M
为什么我们需要多个客户端? , H+ u# o$ Y% }+ \4 U 5 B2 S2 A7 s6 W$ p+ `对于为什么单一客户端体系的结构更可取是存在争议的。而开发多个客户端会产生相当大的开销,这就是为什么我们没有看到任何其他区块链网络认真地追求多客户端选项的原因。 : V7 T" o3 W$ i- P p) X ?# y _9 r( `. M3 B/ P那么,为什么Etherum的目标是成为多客户端?客户端是非常复杂的代码片段,很可能包含错误。其中最糟糕的是所谓的“共识错误”,即区块链核心状态转换逻辑中的错误。一个经常被引用的例子是所谓的“无限货币供应”漏洞,在这个漏洞中,有漏洞的客户端接受打印任意数量的以太的交易。如果有人发现了这样的漏洞,但在他们到达出口之前没有被阻止(即通过混合器或交易所来利用资金),这将导致Ether的价值大幅崩溃。% _7 d4 S5 \* c7 L
) h. a8 \3 L. p; y- D0 \
如果每个人都运行相同的客户端,停止需要人工干预,因为链、所有智能合约和交易所都将照常运行。即使是几分钟的时间也足以执行一次成功的攻击,并充分分散资金,使其不可能只回滚攻击者的交易。根据打印的ETH数量,社区可能会协调将链回滚到利用漏洞之前(在识别并修复错误之后)。 3 ^6 `) D" K" v; O& V' \& } / p) s# l! S# e1 T. Q现在,让我们来看看当我们有多个客户端时会发生什么。有两种可能的情况:2 {- m3 a/ r- w6 I$ i$ _- t$ q
( w' S- A8 V* S: s
1. 有漏洞的客户端只占不到50%的质押份额,客户端将使用利用该错误的事务生成一个块,打印ETH,让我们称这条链为A。( Y, Y! h( G$ X; m* Y) H& r" g
$ k0 R- _9 c2 q' C然而,运行无故障客户端的大多数质押将忽略此块,因为它是无效的(对他们来说,打印ETH操作就是无效的)。它们将构建不包含无效块的备用链B。$ y5 O1 e' G$ x' d
, O! }7 m; `8 B$ A7 Q% o% b
由于正确的客户端占多数,B链将积累更多的证明。因此,即使是有问题的客户端也会投票给链B;结果就是链B将积累100%的选票,链A将死亡。链条将继续,就像错误从未发生过一样。7 D' }3 j+ Y* Z: X
2 k a/ V' A3 \+ m7 l
2. 大部分质押份额使用的是有问题的用户端,在这种情况下,链A将积累多数选票。但是,由于B拥有不到50%的所有证明,违规的客户端将永远看不到从链A切换到链B的理由。因此,我们将看到链分裂。. t# W* O3 q! R) ]% E- s3 [
4 @/ l1 ?. n+ U3 k" o' l4 x, n5 h: l& I- t% p! `" j6 [/ S7 G
# d- _' z6 n. L* G C
情况 1 是最理想的情况。因为这很可能会导致一个孤立的块,而大多数用户甚至都不会注意到。开发人员则可以调试客户端,修复错误,一切安好。相反,案例 2 显然不那么理想。但仍然比只有一个客户端的情况要好--大多数人会很快检测到链条分裂(您可以通过运行多个客户端自动完成这一点),交易所会迅速暂停存款,Defi用户可以在分裂解决时谨慎行事。基本上,与单客户端体系结构相比,这仍然给我们提供了一个闪烁的红色警示灯,从而免受最坏结果的影响。" ~0 G9 A7 {( G3 B* r L7 c
2 U; f2 `$ Q- E6 _; n* X" u
如果有错误的客户端由超过2/3的质押运行,情况2将会更糟。在这种情况下,它将最终确定无效的链。稍后会详细介绍这一点。 0 _# q: s" {) d1 j : D1 n5 [# W# \1 u% |1 y' n7 k一些人认为链分裂是如此灾难性,以至于它本身就是单客户端体系结构的一个论点。但请注意,链分裂只是因为客户端中的错误而发生的。对于单个客户端,如果您希望修复此问题并将链恢复到原来的状态,则必须回滚到错误发生之前的块-这与链分裂一样糟糕!因此,尽管链拆分听起来很糟糕,但在客户端存在关键错误的情况下,它实际上是一个功能,而不是一个错误。至少你可以看到有些地方出了严重的问题。 $ x. a5 ^ T# Z3 M; O5 b) k1 w & ^1 e, R h0 `" R, ?. `激励客户端多样性:反相关性惩罚# d6 l+ C! m, o. i; B4 g
z2 e9 w p; C; e. R
如果质押分散在多个客户端,最好的情况是每个客户端拥有不到总质押的三分之一,这显然对网络有利。这将使其对任何单个客户端中的错误具有弹性。但质押者为什么会在乎呢?如果网络没有任何激励措施,他们就不太可能承担转向少数派客户端的成本。8 e2 J" D3 j. W- m# P3 K& d' X* o) f
, v v, [, t# ~" D
不幸的是,我们不能让奖励直接依赖于验证器运行的客户端。没有不能被欺骗的客观方法来衡量这一点。; U, l. t! g l
- j/ n( c: Y* k2 r! }* e3 p然而,当您的客户端有错误时,您无法隐藏。这就是反相关惩罚的用武之地:其思想是,如果您的验证器做了一些不好的事情,那么如果更多的验证器几乎在同一时间犯了错误,那么惩罚就会更高。换句话说,你会因为相关的失败而受到惩罚。5 d, Z { N; t
* V G9 u- _# _/ Z, V在以太,你目前可能会因为两种行为而被砍掉:- _" v6 f, I' v' b, o4 K
5 R+ B) p$ G1 y0 c! _& I3 M1. 在相同高度的两个区块上签名。9 C, s8 M5 G8 l! @0 R& u0 Z" u
8 M6 v5 N9 v0 p: I5 ^) O9 d
2. 创建一对可删减的证明(环绕投票或双倍投票)。 " I% Y9 y: E, s% w1 t- G9 b. D( k+ k1 p t {1 k4 X. K% i
当你被大幅削减时,你通常不会失去所有的资金。在撰写本文时(Altair Fork),默认惩罚实际上非常小:您只会损失0.5ETH,或您所赌注的以太的1.5%(最终将增加到1ETH或3%)。8 L1 v: ~: y/ y* s, `* |' Z, a
6 D3 d2 g* w+ n2 W然而,有一个问题:还有一个额外的惩罚,它取决于在您的验证器被砍掉之前和之后的4096个时期(18天)内发生的所有其他砍掉。你被进一步处罚的金额与这段时间内被削减的总金额成比例。; A7 F4 l8 N2 i
' L9 r3 L* q1 p3 s' ], x
这可能是比最初的惩罚要大得多的惩罚,目前(Altair 分叉)它的设置是,如果超过一半的全部质押余额在这段时间内被削减,那么你将失去所有的资金。最终,这将被设置为:如果其他验证者的1/3被砍掉,您将失去所有质押。之所以选择1/3,是因为产生共识失败而必须模棱两可的最小权益数量。 4 k. j0 T- p0 J. n1 m* ?4 X5 w9 X: g, l/ ~) u/ @0 ~" W% [
- I5 R, w h, f$ B" ^, q