读懂以太坊的客户端多样性,为何如此重要?
原文作者:Joseph Cook
原文编译:南风,Unitimes
以太坊拥有多个可互操作的客户端,由独立团队用不同的语言开发和维护。这是一项重大成就,可以通过限制漏洞或攻击在受影响客户端的网络部分的运行,为网络提供灵活性。然而,只有当所有用户大致均匀地分布在每个可用的客户端的客户端时才能实现。目前,绝大多数以太坊节点运行单个客户端,给网络带来不必要的风险。
自成立以来,以太坊将很快经历其结构最重要的升级——工作量证明 (PoW) 到权益证明 (PoS) 的合并。这将从根本上改变网络对区块链真实状态达成共识的方式,并保持网络安全。这种新的结构将带来安全、可扩展性和可持续性的好处,但也扩大了单个客户的风险。本文将讨论原因...
信标链信标链是 PoS 区块链。目前与以太坊主网并行运行,但很快就会到来「合并」在一起。合并后,以太坊主网现有客户端 (「执行客户端」) 将继续托管以太坊虚拟机 (EVM),并对广播交易进行验证,但将停止参与工作量证明 (PoW) 开采,放弃对区块链头 (顶块) 达成共识的责任。
相反,这种共识将成为「共识客户端」的责任,「共识客户端」负责把来自「执行客户端」交易与共识所需的信息一起包装「信标区块」这些信标块构成了信标链。「矿工」将被「验证者」(validators) 取代,这些验证者需要 ETH在以太坊智能合约中存储 (这个过程称为「质押」(staking))。
验证者质押ETH 将作为激励他们正确完成验证工作的抵押品。不履行验证工作 (如因离线) 或恶意行为的验证人将导致 质押ETH 部分被销毁。另一方面,如果验证人行为得当,就会得到 ETH 奖励。
1. 验证人的职责对于验证人来说,良好的行为意味着参与验证从其他验证人那里收到的信标块,并投票给区块链头。如果验证人收到的块有效,验证人将对块进行验证「证明」(attest),实际上,投票支持在区块链中添加区块。
其他验证人将不时要求一个节点提出一个新区块「证明」该区块。当区块链有多个分叉时,只有那条在其历史上积累了最多「证明」(attestations) 链是正确的区块链。
验证人还将不时参加同步委员会(sync committee)同步委员会是一个由随机选择的 512 验证人组成的小组,这些随机选择的验证者将是区块头 (block headers)签名,这样轻客户端就可以在不访问整个历史链或整个验证集的情况下检索这些验证块。
2. 合理化& 被敲定信标链为网络设定节奏。该节奏分为两个时间单位:slot和epoch。slot 是将块添加到信标链中的机会,每 12 秒出现一次slot 可能没有块,但当系统以最佳方式运行时,块会添加到每个可用的 中slot 中。epoch 以 32 个 slot (约 6.4 分钟) 为单位的。slot 和 epoch 设置了以太坊区块链的节奏。
在每个 epoch 期间,第一个 slot 中块是检查点(checkpoint)。检查点非常重要,因为检查点被用来使区块链账簿上的记录永久和不可逆转——这是一个分为两个阶段的过程:首先,如果所有活跃的验证者都质押 ETH 余额中至少有 2/3 (即「绝对多数」) 证明了最近的两个检查点(目前称为「目标检查点」,前一个叫「源检查点」),然后这两个检查点之间的区块就会被覆盖「合理化」(justified) 了。
「合理化」这是成为以太坊权威链永久记录的第一步。一旦被子「合理化」另一个被子出现在检查点之后「合理化」检查点,那么前一个检查点就是「被敲定」(finalized) ,即使它是永久性和不可逆转的(即检查点前的所有记录都成为区块链上永久不可篡改的记录)。
这个「合理化」和「敲定」验证人需要进行过程「证明」(attestations) 其实比上面说的复杂。有两种证明:一种是LMD GHOST 投票用于证明区块链的链头 (LMD GHOST 是分叉选择算法);第二证明两个检查点FFG 投票(FFG 是「最后的小工具」(finality gadget),合理化和最终敲定区块链)。
所有验证者都会对每个检查点进行FFG 投票,每个 只有一个随机选择的验证者slot进行LMD GHOST 投票。
3. 质押奖励、惩罚和罚没奖励
如前所述,验证人质押的 ETH 用于作为「抵押品」,鼓励验证者的诚实行为。这些被质押的 ,因为验证者参与保护网络而获得奖励ETH 会随着时间的推移而增加。作为验证者LMD-GHOST 投票和FFG 当投票与大多数其他验证人一致时,验证人将获得证明奖励。
被选为验证人「区块提议者」(block proposer) ,如果其提议的块被「敲定」,然后验证人也会得到奖励。块提议人还可以将其他验证人行为不当的证明打包到他们提议的块中,以增加他们获得的奖励。这些奖励鼓励验证人诚实行事「报酬」。
惩罚
验证者可能会得到「惩罚」 以各种机制的形式销毁部分验证人的质押ETH。验证人未能提交 FFG 投票、提交延迟或提交错误 FFG 投票时会受到证明的惩罚(attestation penalties)。
但如果验证人错过了 LMD-GHOST 投票不会受到惩罚,只是错过了可以通过投票链头获得的奖励。被削减的验证人余额相当于如果他们提交了正确的证书,他们本可以获得的奖励。
这意味着,诚实但是「懒惰」验证人因错过证明而受到的最大惩罚是损失 3/4,如果他以完美的方式证明,他本可以获得的奖励金额。
另外,当验证者被分配到「同步委员会」(sync committee) 时,如果验证人未能签名区块,其处罚将相当于他成功签名区块时本可以获得的 ETH 价值。
一般来说,这些惩罚是温和的,验证者继续懒惰 (inactivity) 仅会使其质押的 ETH 减速相当慢。
罚没
罚没(slashing)这是一种更严重的行为,会导致验证被迫从网络中删除,并导致相关 ETH 质押金损失。有三种方法可以导致验证人被没收,这相当于验证人提出了不诚实的块提议或块证明:
- 在同一个 slot 建议和签名两个不同的区块;
- 对「环绕」另一个区块证明 (实际上是改变区块链历史);
- 通过同一块的两个候选块「双重投票」(double voting)。
如果检测到上述操作,验证人将被没收。这意味着相当于 的质押ETH 1/64 (最高可达 0.5 ETH) 将立即被销毁。
然后,一个为期36 天的拆迁期开始了:在此期间,验证人的质押金将逐渐减少;在此期间的中间点 (第 18 天),验证人将受到额外的惩罚,惩罚大小将与所有被没收的验证人的 相同ETH 质押总额成比例。
这意味着,当更多的验证人被罚没时,罚没的数量将会增加。最大的罚没是所有被罚没的验证人的全部有效余额 (即就是说,如果大量的验证人被罚没,他们可能会损失所有的押金)。
另一方面,一个单独的、独立的罚没事件只会销毁验证人的一小部分质押金。这种随着被罚款人数量而变化的中间惩罚被称为「串谋惩罚」(correlation penalty)。
Inactivity Leak 机制
若信标链已超过 4 个 epoch 没有敲定,所以一个叫「inactivity leak」激活经济机制。Inactivity leak 的最终目的是创造条件,恢复和敲定区块链。如上述所述,「敲定」(finality) 需要 2/3 的 ETH 总质押金对「源检查点」和「目标检查点」达成共识。
如果超过 1/3的验证人离线或未能提交证明,则不可能有 2/3 的绝对大多数验证人敲定检查点。
此时,Inactivity leak 机制会让这些不活跃的验证者 ETH 质押金逐渐减少,直到这些验证人控制的质押金少于网络中总质押金的 1/3,从而允许剩余的活跃验证人敲定区块链。
不管这些不活跃的验证者有多少,剩下的验证者最终都会控制 >2/3 总质押金。这种质押金的减少将是一个强烈的刺激因素,激励不活跃的验证者尽快重新激活!
信标链设计中的奖励、惩罚和惩罚鼓励体验者正确行事。然而,一个系统出现在这些设计选择中,它强烈鼓励了验证者在多个客户端之间的平等分配,并强烈抑制了单个客户端的主导地位。
这是因为,「绝对多数制」对于信标链来说非常重要。单独的恶意验证者对网络无害,但大量的恶意验证者可能会造成严重损害。让我们来看看一些潜在的场景......
风险场景这种资产激励共识客户端的多样性是有风险的。通过多个客户端之间的均匀分布,可以大大降低特定客户端攻击或漏洞的影响,而单个客户端的主导地位会增加这种风险。这种风险倍增效应会随着单个主导客户端的网络份额而变化。
我们可以通过一些假设的 (但可能实际会发生的) 场景来获得更多的直觉感知。让我们假设一个 bug 意外被引入共识客户端, bug 可以直接导致客户端的不正确证明暴露漏洞,使恶意攻击者迫使客户端证明不正确。那么,客户端的多样性会如何影响 bug 后果如何?
场景 1:受影响的客户控制不到 1/3 ETH 质押金由于仍有 2/3 被质押的 ,这种情况为信标链提供了最大的弹性ETH 仍在进行正确地证明,允许信标链正常地进行敲定。因此,从网络的角度来看,这种场景的后果是可以忽略的。受影响的验证者将受到怠惰惩罚,因为他们提交了不正确的证明。这些损失相对较小,受影响的验证者可以等待客户端被修复或者切换到另一个客户端。无论哪种方式,验证者都可以以最小的经济后果和不会破坏信标链的方式继续进行正确的证明。
场景 2:受影响的客户端控制 1/3 以上ETH 质押金这种情况的问题要大得多,因为只剩下不到 2/3 的 ETH 质押金正确证明,即绝对大多数验证人没有正确达成共识。这意味着信标链无法敲定, Inactivity Leak 机制将被激活。这时, bug 影响整个网络。
以太坊以上的交易所和 Dapps (去中心化应用) 区块链敲定 (finality) 至关重要如果区块链不能敲定,就不能保证交易是永久性的,不能篡改。
对于使用受影响客户端的个体验证人,相关处罚要严重得多,因为 Inactivity Leak 机制的激活意味着个体验证者质押的 ETH 在这之前会逐渐被销毁个受 bug 影响的客户端控制不到 1/3 的 ETH 总质押金,且只有到那个时候信标链才会恢复敲定。
这种 ETH 的销毁实际上可能会在信标链恢复后持续一段时间,从而为验证者数量的小变化提供缓冲。只有当受影响的客户端控制 1/3 以上时ETH 总质押金时,信标链的敲定将处于危险之中。
在这种情况下,其他替代客户端的验证者正常运行 Inactivity Leak 机制在激活期间不会得到任何奖励。这是防止攻击者故意启动 的安全机制Inactivity Leak 机制提高了攻击者控制的其他验证者的总奖励。
这些都是很小的惩罚,但关键是没有人能控制 1/3 以上的 ETH 客户端总质押金共识 bug 逃脱负面后果。
场景 3:受影响的客户端控制 1/2 ETH 质押金这种情况可能导致信标链中不可恢复的分叉。如果有共识 bug 如果客户端分叉到自己的链上,原来的链和新的分叉链就无法敲定,因为新旧链大约有一半缺乏验证,都会激活 Inactivity Leak 机制。
此时,这两条链上缺少的验证者 ETH 质押金将逐渐被销毁,直到其控制的质押金少于 1/3 网络 ETH 总质押金,此时每条链上的验证者才可以再次开始进行敲定。这个过程在两条链上花费的时间相同,因为恢复敲定需要销毁的 ETH 数量相等。
这两条链将使用不同的检查点独立完成敲定。这两条链可能永远不会合并成单独的「权威链」。以太坊社区需要哪条链才能解决「权威链」达成共识。
这一过程在政治上肯定很难处理和引起差异,导致一半社区因切换区块链而造成的经济损失 (不包括 ETH 可能会贬值)。也许更糟糕的是,社区可能只是继续分裂 (类似 The DAO 事件导致以太坊经典)。
为避免信标链的永久分裂,使用受影响客户端的验证人必须与 一起使用Inactivity Leak 赛跑切换客户端,或者在区块链开始敲定之前修复客户端。可能有 3-4 在此期间,开发人员将争相拯救以太坊。在这种情况下,大量的验证人无法逃避重大的经济损失。
场景 4:受影响的客户端控制着超过 2/3 的 ETH 质押金对于信标链来说,这是一场噩梦,因为受影响的客户端控制着大多数验证者,并能够确定他们自己的链。这样,不正确的信息很可能永远固定在以太坊的历史记录中。在区块链开始确定非法区块之前,客户团队将有大约13分钟的时间来确定共识 bug、修复它,并向受影响的验证人广播客户端更新信息。
在这种情况下,唯一可行的缓解方法是让受影响的验证者取出他们的质押 ETH 并退出区块链。如果是 bug 修复后,这些受影响的验证者试图重新加入正确的区块链「串谋惩罚」并被罚没,因为他们此时证明的检查点与他们之前证明的检查点相矛盾,而且是集体进行的。
Inactivity Leak 机制将因大量验证人离开而激活,这意味着这些受影响的验证人在等待取款 (退出) 时会继续失去 ETH 质押金。因为有很多验证者要退出,等待的队伍会很长,很慢,很贵。
唯一的选择是,剩下的不受影响的客户端接受 bug,加入新链,并同意 bug 从此成为以太坊共识层的预期行为。这将与 有关staking (质押) 社区的核心原则背道而驰,会造成很大的分裂。即使他们的行为得当,这些少数客户端也会在新链上受到懒惰的惩罚。
这两种选择都不是一个好的选择。前者的选择对受影响的验证者来说非常昂贵,在逻辑上很难纠正。后者的选择将严重破坏对以太坊的信任,并导致我们接受永久污染的链。
其他风险逆转最终性
如果单个客户控制 2/3以上的 ETH 总质押金,所以客户端的开发者有能力选择区块链历史的哪个版本是正确的。例如,如果客户端的开发者变得恶意,他们可以花一些钱ETH (比如通过某个交易所套现,或者桥接到另一个区块链网络),然后这些开发者集体投票,使用另一个不包含这笔花费交易的链版本来代替当前这个已经被敲定的链。
这是一种「双花」,因为客户端控制着绝大多数的验证者,他们可以逆转最终性,重写历史。与此同时,少数诚实的验证者将因其不一致的证据而受到惩罚。
绝对大多数 都是恶意控制的ETH 总质押金的攻击者也可以威胁要这样做,并控制网络索要赎金。即使是控制 1/3的 ETH 总质押金的恶意团队也可以威胁停止链的敲定和激活 Inactivity Leak 机制。
共同的责任
之前对客户开发团队的看法有些悲观,不是因为这是合理的,而是因为恶意行为是可能的,所以需要预防。然而,这些开发人员最有可能永远是好人,他们需要抵制单个客户的主导地位,不仅因为他们可能是以太坊用户 (和 ETH 持有人或质押人),由于网络安全责任不应集中在小团队的肩上。
开发人员的行为对整个以太坊的健康产生了巨大的影响,他们的压力和心理健康是真正的代价。这种情况是通过在多个独立团队之间分担责任来避免的。
中心化
即使客户端开发团队完全由善意的开发者组成,当他们控制大部分 时ETH 质押时,他们仍然保留了以太坊运营的过度权力。分散化是以太坊的核心原则,必须包括开发者、用户和托管人的分散化。
通过均匀分配 ,跨客户端开发团队分散ETH 存款限制了单个客户团队对分叉内容和时间做出关键决策,从而限制了他们对以太坊哲学方向的影响。客户端的多样性确保了开发者层面的分散决策。
政治
社会恢复 一条诚实链(social recovery)这是一个充满政治问题的问题。以太坊的共识机制应该基于编码到客户端的规则——这是它的主要目标。干预过程可能会导致以太坊社区的分裂,导致不同用户在哲学、伦理和技术上缓解主要客户端的共识 bug/攻击有各种各样的观点。治理决策将是笨拙和破坏性的,可能太慢,无法达到最大的有效性。
真实例子上述场景发生的概率相对较低。开发人员在研究和测试软件的每一次更新时都是细致的,没有理由怀疑任何客户团队的职业道德。
然而,这些场景并不是纯粹的假设。一些真实的例子表明,客户端的多样性拯救了以太坊的主网络,以避免永久损坏,并达成了一些共识bug 也破坏了以太坊测试网。以下是一些例子。
上海攻击
2016年 9月,在上海 DevCon 会议期间,黑客攻击以太坊,利用客户软件中的几个漏洞,显著放缓了网络速度。攻击者坚持不懈,迅速部署新的类似攻击,而客户开发人员则竞相反向工程和修复这些攻击。
最后,攻击者在Geth 在客户端中发现了一个无法修复的漏洞,这使得硬分叉不可避免。即使在硬分叉升级后,攻击者仍然发现了一个拒绝服务的漏洞,利用之前攻击引起的膨胀状态迫使客户端在每个块中进行数万次缓慢磁盘 I/O 操作。
由于开发人员努力修复 ,客户端的多样性就赢了Geth 漏洞时,以太坊可以继续使用替代品Parity 客户端没有同样的漏洞。
上海攻击可以恢复,因为有多个客户端,但如果是类似的 bug 影响大多数共识客户端的情况可能完全不同。
如果一个「共识客户端」与当时 Geth 被攻击时具有相同的主导地位,因此以太坊的数量将无法敲定,因为大多数验证者将无法证明该块。Inactivity Leak 将被激活,因为只有不到 1/3 的 ETH 质押金可用于证明。
Insecura 链
「远程攻击」最近 的可行性Pyrmont 测试网已经被证明了。其想法是建立一组验证人来证明一个备用的区块链历史。然后,这些验证人被用来引诱新的验证人加入这个不诚实的「Insecura」链条,从而逐渐增加受影响的验证,最终中断区块链敲定和激活 Inactivity Leak 耗尽了大多数诚实的验证者ETH 质押金的程度。
最后,这可能会导致受影响的客户终于确定了他们自己版本的区块链。虽然所需的时间和金钱投资使这种行为不太可能成为攻击向量,但类似的动态可能会导致共识客户端中的 bug 大部分感染网络。
Medalla 测试网
此前由于 Prysm 客户端时钟问题,Medalla 测试网络的活跃验证者数量突然下降。这条链无法敲定,因为太多的验证者退出了网络,以至于 2/3 绝大多数被质押 ETH 不再可用于证明。
它的恢复是渐进的,因为这取决于验证者将客户端从 Prysm 切换到其他少数客户端。然后,真正的时间和 Prysm 客户端错误的时钟时间在一起,无效的证明突然变得有效。
这导致 Prysm 同时,客户端陷入停滞Teku 和 Lighthouse 客户端也因突然处理大量的证明而遭遇了巨大的状态膨胀。如果 Prysm 是 Medalla如果 Prysm 客户端控制不到 1/3 的 ETH 总质押金,可以避免很多混乱。
Prysm 存款根 bug
2021 年初,Prysm 客户端遇到了一个和 Eth1 存款根验证相关 bug。当时,Prysm 客户端可生成无效存款根(deposit root),并将其传递给其他 Prysm因为 Prysm 由于 的原因,这种无效的存款根在网络上迅速传播Prysm 遵循绝大多数的投票机制,而不是在每个区块中确验证存款根,从而加速其传播。
虽然该 bug 的影响很小,没有中断信标链的确定,也没有给验证人带来重大的经济惩罚,但这一事件证明了客户多样性的重要性:首先,如果 Prysm 客户端有较小的验证者份额,因此会限制 bug 在整个网络中传播,减少其影响。
其次,事件发生后的分析文章描述了如何以替代客户为基准,帮助开发人员快速识别和修复 bug。显然,没有多个积极维护的客户端是不可能的。
目前客户端多样性上图显示了以太坊客户端的多样性:左边是执行客户端的比例,右边是共识客户端的比例。
以上两个饼状图显示了以太坊执行层和共识层当前客户多样性的快照 (截至 2022年 1 月撰写本文时):执行层由执行层组成Geth主导客户端,OpenEthereum客户远远排在第二位,Erigon客户端排名第三,Nethermind第四,其他客户端只占网络 1%。
共识层最常用的客户端Prysm虽然不像执行层 Geth 客户端占主导地位,但仍有60%以上 网络,Lighthouse和Teku分别占 20% 和 14%,其他客户端则很少使用。
2022年 1 月 23日通过了执行层数据Ethernodes 网站(ethernodes.org/)获取;共识客户端数据来自 Michael Sproul(github.com/sigp/blockprint)。共识客户端数据要更难获取,因为信标链客户端并不总是具有可以用来识别它们的明确踪迹。
这些数据是由一种分类算法生成的,有时会在少数客户端出错。然而,很明显,共识层的大多数网络节点都在运行 Prysm。Prysm 的优势有时更高,超过 68%。虽然只是快照,但图中的比例为客户端多样性提供了良好的整体理解。
由于影响执行客户端的 ,执行层的客户端多样性包含在上图中bug 也可能传播到共识层,因为合并后,共识层和执行层将耦合在一起,执行客户端产生的执行负载 (execution payload) 将是信标区块的核心组件。
个人质押者 & 质押池主要交易所和押注池 需要解决客户端分配不平衡的问题(stking pools) 采取行动。但个人质押者也可以通过选择操作非 Geth/Prysm 客户端组合来发挥作用。搭建少数客户端的说明须知可以在这个 clientdiversity.org 页面找:https://clientdiversity.org/
持有量少于 32 ETH 或者不想要承担运行验证者的责任的质押者来说,有一些质押服务提供商可以使用。一些主要的中心化交易所提供 ETH 质押服务,但其质押池中客户端的分布通常是秘密的,这些交易所提供 ETH 质押 Token 的可交易性有限。由于这些原因和其他原因,不建议使用这些集中的服务提供商。
更好的选择是使用更分散的流动性押注服务提供商,如 Lido 或 Rocketpool。这些服务提供商提供 ETH 质押服务还提供流动性 Token (例如用户通过 Lido 协议质押 ETH 将获得具有流动性的 stETH Token ),这些流动性 Token 的价值会随着验证者积累的奖励而增加。
这些 Token 可用于交易或赚取 DeFi 收入。这些流动性质押平台的客户分布也应该更加透明,比如 Lido 季度更新将发布, Rocketpool 现在也发布了他们的季度更新。对于不能或不愿意运行自己验证器的用户,这些服务是实现更好客户多样性的途径。
总结信标链的奖惩协议直接激发了客户端的多样性。单个客户端的主导地位将是对以太坊的潜在威胁。当单个主导客户端表现良好时,威胁是看不见的,但当客户端达成共识时bug 这种威胁可能是灾难性的。拥有多个客户端是以太坊的独特优势,也是开发者社区勤奋的证明。
然而,当客户端控制大部分 时ETH 质押时,这种 (以太坊开发者社区) 的努力会被削弱。理想情况下, 平均分布在至少4个客户端ETH 质押金最多给每个客户端 1/4 ETH 质押金。很容易使用现在可用的客户端生产。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。