免责声明:本文没有贬低任何一个客户端。每个客户端,甚至是规范,可能都存在不足和漏洞。ETH 2.0 是一个复杂的协议,实现这个协议的人也都是肉体凡胎。本文旨在强调如何以及为何要降低风险。
随着 Medalla 测试网上线,官方团队鼓励人们对不同的客户端进行实验。从创世的那一刻起,这么做的重要性便凸显出来:Nimbus 和 Lodestar 节点因无法处理测试网的负载量而卡住 [0] [1]。结果,Medalla 在上线半个小时内无法敲定区块。
在北京时间 8 月 15 日,由于 Prysm 客户端用来作为参照的时钟服务器突然出现偏差,Prysm 节点的时钟提前了 4 小时。因此,这些节点一直在为超前的 slot 创建区块和见证消息。等这些节点的时钟恢复正常后,那些禁用了默认罚没保护机制的验证者发现自己遭到了罚没。
若想了解更详细的情况,我强烈推荐你阅读 Raul Jordan 的《ETH2 Medalla 测试网事故》一文(编者注:见文末超链接)。
出现时钟偏差时,Prysm 节点占全网节点的 62% 左右。这就意味着,网络无法达到敲定区块所需的最低参与率(> 2/3)。更糟糕的是,这些节点找不到它们所预期的区块链顶端(历史记录中有长达 4 小时的 “空白”,而且所有 Prysm 节点的时钟之间都存在细微偏差),因此这些节点都在猜测 “缺失” 数据,创建了很多短的分叉链,造成网络拥堵。
-目前,在 Medalla 测试网的所有节点中,Prysm 节点占比高达 82% ?!(ethernodes.org)-
这时,网络上充斥着成千上万个关于区块链顶端的猜测,而且还在不断增加之中,为了辨别哪个分叉是正确的,所有客户端都开始不堪重负。这就导致节点出现停滞不前、无法同步和内存不足等问题,以至于情况进一步恶化。
塞翁失马,焉知非福。经过这次事故,我们不仅可以修复时钟的根本问题,还能在大规模节点故障和网络负载过重的情况下对客户端进行压力测试。尽管如此,这次事故本来不会造成这么极端的后果,根本原因在于 Prysm 节点占比过大。
正如我此前所讨论的那样,就异步拜占庭容错算法而言,1/3 是安全阈值。如果超过 1/3 的验证者离线,网络就无法实现终局性。虽然 ETH 2.0 区块链在不断增长,但是验证者却不敢保证哪个区块、哪个状态一定不会被颠覆。
从根本上来说,我们希望经济激励机制足以让验证者做对整个网络都好的事,而不用我们相信他们是好人。
如果有超过 1/3 的验证者节点离线,离线节点所遭受的惩罚就会加重。这就是所谓的不作为惩罚(inactivity penalty)。
也就是说,作为一名验证者,你会希望自己在因为某种原因被迫离线的同时,不会有很多其它节点因为同样的原因离线。
罚没也是如此。 虽然你的验证者节点有可能因为规范或软件故障/漏洞而遭到罚没,但是个体罚没只会损失 1 ETH 。
然而,如果有许多验证者和你同时遭到罚没(达到 1/3 的安全阈值),罚金就会高达 32 ETH 。(预知详情,可参见这篇文章。)
上述两种情况分别称为活性反相关机制 (liveness anti-correlation)和安全性反相关机制(safety anti-correlation),是 ETH 2.0 中精心设计的部分。反相关机制将个体惩罚与每个验证者对网络的影响联系在一起,以此激励验证者做出对网络最有利的决策。
ETH 2.0 由多个独立团队实现。每个团队都根据 ETH 2.0 研究团队编写的规范开发独立的客户端。这样可以确保有多个信标链节点和验证者客户端实现。在构建 ETH 2.0 客户端时,每个客户端团队在技术、语言、优化和权衡关系方面会做出不同的决定。这样一来,即使 ETH 2.0 系统的任意一层出现漏洞,只会影响运行特定客户端的节点,不会波及全网节点。
以 Medalla 测试网上 Prysm 节点的时钟偏移为例。如果只有 20% 的 ETH 2.0 节点运行 Prysm 客户端,且 85% 的验证者在线,则 Prysm 节点就不会遭受不作为惩罚。开发团队只需熬几个通宵就可以解决这个问题,惩罚力度也能控制在最小范围内。
事实上,由于太多验证者都集中在同一个客户端上(而且很多验证者都禁用了罚没保护机制),短时间内遭到罚没的验证者人数在 3500 至 5000 之间。* 如此高的相关性意味着,这些验证者的损失约为 16 ETH ,就因为他们运行的是热门客户端。
至本文截稿时,罚没金额还在大幅增加,尚未得到最终数据。
现在正是尝试不同客户端的时候。不妨来体验一下小众客户端。(点击此处,查看验证者的分布情况。)目前,Lighthouse、Teku、Nimbus 和 Prysm 都比较稳定,Lodestar 正在迎头赶上。
最重要的是,一定要尝试新的客户端!我们可以在 Medalla 上让不同客户端的验证者分布合理化,以便迎接 ETH 2.0 主网上线。
原文链接:
https://blog.ethereum.org/2020/08/21/validated-why-client-diversity-matters/
作者: Carl Beekhuizen
翻译&校对: 闵敏 & 阿剑