撰文:Labrys

编译:深潮TechFlow

本文讨论了以太坊网络中执行客户端Nethermind遇到的一个故障,导致所有使用Nethermind的验证器(约占网络的10%)离线。文章强调了Geth客户端在以太坊网络中占据的超多数地位以及由此带来的潜在风险。尽管Geth是稳定且可靠的客户端,但如果出现严重故障,由于其在网络中的普遍使用,可能对整个网络造成重大影响。文章呼吁社区重视执行客户端的多样性,以降低网络面临的集中化风险。

介绍

本周,以太坊网络的一个执行客户端Nethermind经历了一个故障,导致所有运行Nethermind的验证器(约占网络的10%)离线。

这是一个较小的事件,因为Nethermind是少数利益相关者运营的。以下是我自己运行Nethermind的验证器的总余额的图表。你可以看到在当地时间凌晨4点左右,当故障首次发生时,验证器就离线了。团队在大约4小时后发布了一个补丁,等我安装好后,验证器在当地时间上午9点左右恢复运行。在此期间,我的验证器受到的惩罚与它获得的奖励相同。在同一天下午1点,验证器的余额高于宕机前。总的来说,这是一个小的故障。

许多人错误地假设,当运行Geth时,如果发生类似的故障,惩罚会类似。这不是真的。这与Geth或Geth的构建方式无关,而与运行Geth的人数有关。

根据ClientDiversity.org的数据,以太坊上约 84% 的验证器都在运行 Geth。现在这些持有者的辩护是,Geth无疑是最好、最稳定的客户端。虽然像Nethermind这样的少数客户端本周受到了故障和停机的困扰,但Geth自合并以来(甚至在此之前)一直运行良好。根据我自己的经验,当从 Geth 转换到少数派客户端时,我发现验证器需要更多的资源,遗漏的验证也更多。

这篇文章并不是对Geth的攻击。我非常尊重他们的团队。不幸的是,由于Geth的广泛使用,我们需要诚实地讨论当 Geth 持有绝大多数质押时运行 Geth 的风险。

如果他们知道自己更有可能经历更多错过的证明和更多的停机时间,那么没有人愿意离开 Geth,尤其是那些依赖于正常运行时间来宣传最高收益的商业模式,比如专业的质押运营商。

截至去年 9 月,估计最大的运营商 Lido 在 Geth 上运行约 76% 的验证器。

但我很高兴我在运行一个少数的客户端,即使我失去了一些额外的奖励,不是因为我是利他主义者,为了网络的去中心化牺牲个人利益,而是因为我知道我的ETH会因此免于大多数bug的影响。

如果Geth出现bug,会发生什么?

这取决于bug本身。

因为超过三分之二的以太坊验证器运行Geth,任何Geth中的严重故障都会立即阻止链的最终确定。这并不意味着链停止或中断。只要其他客户端仍在运行,链就会继续运行。大约84%的区块将被遗漏,这意味着每隔约 75 秒才会提出一个新区块,而不是约 12 秒的区块时间。这些区块将容易发生重组,因此当链再次完成时,这些区块中包含的交易不保证仍然存在。这听起来很糟糕,但让我们记住,多年来以太坊在合并前从未有过最终确认的概念,比特币今天也是如此——这就是为什么交易所让你等待 6 个以上的区块确认才能存款,以降低发生重组和损失资金的风险。

有些人可能还记得,以太坊在 2023 年 5 月就已经发生过这种情况,当时一些共识客户端出现了bug。在两天时间里,链条两次停止终结,导致许多区块被遗漏,一度只有 40% 的网络仍在运行。网络恢复后,大多数 DApp 用户除了交易区块确认速度稍慢外,没有发现任何问题。

但验证器会怎么样呢?

非活动泄漏

当少数客户端失败时,惩罚是以与获得它的速率相同的速率失去ETH(正如您在我上面的验证器图中看到的),但如果Geth失败,因为它会立即阻止链最终确定,所以惩罚会更加严厉。这种增加的惩罚被称为非活动泄漏(The inactivity leak),当链停止最终确定 4 个周期(约 25 分钟)或更长时间时,它会应用于离线验证器。这种更严厉的惩罚旨在鼓励离线验证器尽快恢复在线,或者在最坏的情况下,销毁离线验证器的权益,直到他们的权益占总权益的1/3以下,从而允许在线验证器完成链的确认。

在非活动泄漏期间,验证器仅需离线2天就会损失其权益的0.6%,或相当于2个月的权益奖励!

仅需离线5天,就会消耗掉整整一年的质押奖励(3.5%)!这意味着需要超过 2 年多的质押才能恢复验证者在事件发生前拥有的余额。

在离线1周内,10%的权益,或3年的奖励,将会丢失。在大约20天内,50%的权益将会丢失,在大约40天内,90%的权益将会丢失。

相比之下,由于少数客户端故障而离线的验证器在40天内仅会损失其权益的0.4%。

不活跃的惩罚将持续多久?

这取决于bug。

如果bug能被修补,那么惩罚将持续到 Geth 团队修补bug并将其应用到您的验证器所需的时间(或切换到其他执行客户端所需的时间)。

实际上,我们预计这个问题可以在几个小时或最多几天内得到解决。如果修复bug所需的时间与最近的Nethermind事件相同,验证器将损失0.004%的权益,这不是什么大问题。

如果bug导致验证器产生无效区块,并且Geth将其视为有效并对其进行认证,情况就会变得糟糕。这将导致链分叉。链将分成两个分支,一个包含无效区块的分支(Geth链),另一个忽略无效区块的分支(非Geth链)。运行Geth的验证器将认为这两个分支都是有效的,因此决定在权重最重的链上构建。84%的验证器将其权益认证给Geth链,仅有16%的验证器将其权益认证给非Geth链。因此,Geth验证器将选择Geth链作为权重最重的链,并继续在其上构建。

当然,一旦所有这些问题解决了,Geth链上的区块将被弃用(这将引起自己的问题),但更大的问题是Geth链将拥有足够的权益(大于2/3)来确认无效链。

一旦Geth链最终确定,如果一个验证器对Geth链进行了认证,它就不能参与非Geth链的建设(直到非Geth链也被确认),否则会被削减。本质上,运行Geth的验证器已经承诺使用无效链,并被锁定在该链上,直到非Geth链被确认。这正是许多人误解的关键风险所在。

由于Geth验证器被困在无效链上,他们在非Geth链上被视为不活跃,并将遭受非活动泄漏的损失。没有任何软件更新或bug修补可以拯救这些验证器。他们将被耗尽,直到他们的权益占网络的1/3以下,从而让非Geth链得以确认。

目前网络上有 28,976,695 ETH 处于质押状态。其中84%(约2400万枚ETH)可归因于运行Geth的验证器,16%(约500万枚ETH)归于不运行Geth的验证器。为了让非Geth链得以确认,运行Geth的验证器需要将其权益销毁,直到其所占的剩余总权益少于1/3。这意味着需要从这些验证器中销毁约2150万枚 ETH(约占总权益的90%),将Geth权益减少到约25万枚 ETH,少于总量的1/3(250万枚+ 500万枚ETH)。非Geth验证器控制的约500万枚ETH现在将代表多于2/3的权益,使他们能够确认链。

这将是一个极其痛苦的过程,大约需要40天时间来完成。它将导致所有 ETH 的总供应量减少约 18%,,使总供应量低于1 亿枚ETH。

争夺出口

这里的一个重要点是,处于无效链上的验证器不太可能坐视不管。他们仍然有选择退出他们的权益的选项,如果他们不这么做,网络将在他们的有效余额达到16 ETH时强制将他们驱逐出去。但这并不意味着他们的损失仅限于16 ETH。

当你退出一个验证器(即使是被强制退出)时,你会进入退出队列,而你在退出队列中时,你仍会流失ETH!

我们知道,在最坏的情况下,需要约40天的时间,非活动泄漏才能允许有效链重新开始确认。那么退出队列需要多长时间呢?

退出队列有一个流失限制,限制每个时期可以退出网络的验证者数量(约 6.4 分钟)。流失限制定义如下:

当前的退出率为每6.4分钟退出13个验证器,如果每个运行Geth的验证器都想退出,至少需要约260天才能让所有验证器退出。鉴于90%的权益将在约40天内被销毁,大多数验证器的余额将在他们能够退出链之前就被耗尽。

最初2%的Geth验证器发起退出的将在前5天内退出,损失的最大值约为1年的质押奖励。

你需要成为前3%的退出验证器,才能将损失控制在你权益的10%以下。

只有前8%的退出验证器才能将损失控制在其权益的50%以下。此时,任何未手动发起退出的人将被强制退出,并添加到退出队列中,有效余额为16 ETH。

在40天后,当他们的90%权益被销毁时,超过85%的验证器仍将在队列中。

退出的能力将无法拯救你,你的下行风险不仅限于你被强制退出的损失(16 ETH)。

那么削减呢?

一些人错误地认为,如果出现bug,运行Geth的质押者不仅会遭受非活动泄漏,还会被削减。这是错误的。

削减惩罚只适用于双重签名事件,这完全由共识客户端控制。Geth中的bug不应该导致共识客户端犯下可削减的错误。Geth产生无效区块不是可削减的错误。

只有非活动泄漏的惩罚适用于Geth的bug。

你应该怎么做?

当今运行Geth的质押者可能并不完全了解运行绝对多数执行客户端相关的风险。许多人错误地假设,一旦出现bug,将在几小时内发布补丁解决问题,并且在此过程中损失的以太币很少。

许多人并不了解,证明一个无效区块的风险会让他们被锁定在一个无效的最终链中,几乎可以肯定他们大部分ETH将被销毁。这是一个有可能成为现实的真实风险。

质押以太坊并非无风险收益。你是否会向最大潜在收益为每年 3.5% 的工具投资至少 75000 美元?但有可能产生 100%的损失?可能不会,但这正是今天84%的以太坊质押者所做的。

通过转向少数客户端(假设相同的bug不会在多个客户端中出现),你可以将损失最大限制在年化3.5%。

有了这些知识,任何人仍在运行Geth看起来都是疯狂的。我只能假设那些运行Geth的人并没有完全理解这个风险。

如果你持有LST(例如stETH、cbETH等),并且LST在其验证器上运行Geth,请理解你的以太坊处于风险中,并考虑取消质押或切换到另一个LST,直到Geth不再占据超主流地位。