2023年10月22日

读懂以太坊的客户端多样性为何如此重要

作者 admin

撰文:Joseph Cook
编辑:南风
以太坊有多个可互操作的客户端,由独立团队用不同的语言开发和维护。这是一项重大成就,通过将漏洞或攻击的影响限制在运行受影响客户端的网络部分,可以为网络提供弹性。然而,只有当所有用户大致均匀地分布在各个可用的客户端上时,才能实现这种优势。目前,绝大多数以太坊节点运行单个客户端,给网络带来不必要的风险。
以太坊将很快经历自成立以来其架构最重要的一次升级——从工作量证明 (PoW) 到权益证明 (PoS) 的合并。这将从根本上改变该网络对区块链的真实状态达成共识的方式,并维护网络安全。这种新架构将带来安全性、可扩展性和可持续性方面的好处,但同时也放大了与这种由单个客户端占主导地位有关的风险。这篇文章将探讨其中的缘由…
01. 信标链
信标链是一条 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 质押金损失。有三种方式会导致验证者被罚没,所有这些都相当于验证者进行了不诚实的区块提议或区块证明:
  1. 在同一个 slot 提议和签名两个不同的区块;
  2. 对“环绕”某个区块的另一个区块进行证明 (实际上就是更改区块链历史);
  3. 通过对同一个区块的两个候选区块进行“双重投票”(double voting)。
如果检测到上述这些操作,验证者就会罚没。这意味着相当于其质押的 ETH 的 1/64 (最高可达 0.5 ETH) 将立即被销毁,然后一个为期 36 天的移除期开始了:在此期间,验证者的质押金将逐渐被削减;且在这段期间的中间点 (第18天),该验证者还将受到额外的惩罚,惩罚大小将与此次罚没事件发生之前的 36 天内所有被罚没的验证者的 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 的总质押金。这种质押金的削减将是一个强烈的刺激因素,激励不活跃的验证者尽快重新激活!
信标链设计中的奖励、惩罚和罚没鼓励了个体验证者正确行事。然而,从这些设计选择中出现了一个系统,它强烈地激励了验证者在多个客户端之间的平等分配,并强烈地抑制这种由单个客户端占主导地位的情况。这是因为,“绝对多数制”对于信标链来说非常重要,单独一个恶意验证者对网络而言是相当无害的,但大量恶意验证者将可能造成严重破坏。让我们来看看一些潜在的场景……
02. 风险场景
这种资产激励共识客户端多样性是有风险的。通过在多个客户端之间均匀分布验证者,可以大大减少针对特定客户端的攻击或漏洞带来的影响,而单一客户端占主导地位则会增加这种风险。这种风险倍增效应会随着单个主导性客户端占据的网络份额多少而变化。
我们可以通过一些假设的 (但可能实际会发生的) 场景来获得更多的直觉感知。让我们假设一个 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 总质押金。