Cover photo

ET小队出品 | 通往单时隙的最终确定性

原作者:Vitalik Buterin |译者:0xhhh| 审阅:York, zik

特别感谢 Justin Drake、Dankrad Feist、Alex Obadia、Hasu、Anders Elowsson 和诸多 hackmd anons 提供反馈和对本文不同版本的审阅。

今天,以太坊区块需要 64-95 个时隙(slot,约 15 分钟)才能被最终确定,即不会被回滚。

这 被认为 是在 去中心化/最终确定时间/开销权衡曲线 上选择了一个折衷立场:15 分钟达成最终确定性不算太长,与现有交易所的确认时间相当;以太坊允许通过质押 32 ETH 成为网络的验证者(而不是早期的 1500 ETH),这可以让大量用户在普通计算机上运行节点。与此同时,仍有充足论据表明,我们可以将最终确定时间减少到一个时隙。本文为一篇研究现状的文章,并重现了如何做到这点的一条路径。

以太坊质押今天如何以及为何有效

  • 以太坊的共识机制(LMD GHOST + Casper FFG)是在 PoS 区块链中流行的两种主流共识的折中: 基于链历史的共识 (Chain-based consensus),其中在每个时隙(预先确定的时间间隔,例如以太坊中的 12 秒)期间产生一条消息(块)。基于链历史的共识最大化了参与者的数量并最小化了链负载,但容易分叉并且没有任何确定性的概念。

  • 传统拜占庭共识,除了一个验证者出一个块之外,每个验证者对该插槽都发出两条消息(“证明”——这里实际上是两阶段投票的过程),并且下一个插槽开始前,原插槽的区块将被不可逆地“最终确定”。传统的 BFT 共识最大限度地减少了最终确定的时间,但代价是高链负载并且仅支持少数参与者。

与基于纯链历史系统 (pure chain-based systems) 不同,以太坊的共识在每个时隙会包含由成千上万个投票给链头的行为产生的证明。在两个 epoch 之后,Casper FFG 的最终确认性部件会最终确定 (finalizes) 该区块,此时要回滚这个区块至少需要 1/3 的验证者烧掉他们的存款,这意味着攻击成本超过约 400 万 ETH。以太坊的最终确定性机制不像一个时隙就可以达成最终确定性的传统纯拜占庭系统。

因此,今天的以太坊提供:

  • 中等的最终确定性时间 - 比传统拜占庭共识的单时隙最终确定性的时间更长,但是相比基于链的共识达成最终性所花的几周或者几个月的时间更短。

  • 中等链负载 - 每个时隙有数千条消息,但少于使用传统拜占庭系统时的数十万条消息。「译者注」这里的链负载(chain load)指的是每个时隙区块链去要传递和验证的消息数量。

  • 中等节点数量 - 成为以太坊的验证者需要质押 32 ETH:基于链的共识(即使是很小的金额也可以参与)比传统的需要大额质押的 BFT 要容易得多。

post image

由于 BLS 签名聚合的效率提升使以太坊可以承载更高的链负载。多亏了这些效率的提升,以太坊网络的数据和 CPU 计算成本水平将由高链负载降低到中链负载。

BLS 签名聚合可以将多个签名结合成一个,例如:

  • 每个参与者在验证签名时只需要多计算一个额外的椭圆曲线加法(不需要乘法)。

  • 一个任意大的签名都可以适合 64 个字节。

  • 只需要一个额外的比特来记录谁参与了。

基于链的方法和传统的 BFT 方法之间的折衷与 BLS 实现的纯效率增益相结合,带来了以太坊今天的共识。

为何改变它?

在使用上述推理开发最初的以太坊共识协议的这些年里,我们了解到一个主要的好消息和一个主要的坏消息。

坏消息:混合共识机制实际上带来了很多不可避免的问题

当前以太坊的混合共识面临的问题:

  • 用户体验:大多数用户实际上不愿意花 15 分钟等待交易的最终确定。今天,即使是交易所也经常认为存款在 12-20 次确认(约 3-5 分钟)后“完成”,尽管 12-20 次 PoW 确认提供的安全保证较低(与真正的 PoS 最终确定性相比)。

  • 通过区块重组获取MEV:混合共识机制保留了短期重组的可能性,因此仍然为接近多数或多数的节点通过协调重组链(reorg)获取 MEV 留了机会。更加具体的讨论可以看这篇文章。

  • 交互 Bug:(Casper FFG)最终确定机制和(LMD GHOST)分叉选择机制之间的交互接口是显著复杂性的来源。它导致许多需要相当复杂的补丁来修复的攻击情况,并且经常被发现新的问题。

  • 其他协议带来的复杂度:数百行规范代码用于维护验证器集改组等机制。

好消息:使用 BLS 聚合签名能支持的验证器数量可能比我们想象的更多

在过去的三年里,使用 BLS 进行聚合签名的效率有了显著提高,我们对如何高效处理和组合大量消息和数据的认知也有了明显进步。

使用 BLS 支持大量验证者存在两个主要瓶颈:

  • 最终验证:验证来自 N 个验证者的签名最多需要 N/2 个 ECADD 来计算组公钥 (group public key),也需要 N 个比特的数据来存储谁参与了此次签名。在真实网络中,这些数字会提高 16 倍(由于需要为视图合并提供冗余聚合器)。

  • 签名聚合: 将 N 个验证者独立发送的签名结合成一个聚合签名。这个过程需要至少 96 * N 个字节大小的带宽成本来执行。并且它需要在(4 倍以上的密集性计算)G2群上执行 N 次 ECADD 计算,但这些计算可以很容易地“分片”到子网中去计算。

「译者注:这里的计算量是针对签名聚合者而言的,带宽成本是 96 N 是因为每个验证片段私钥的签名大小就是 96 byte,所以总体带宽成本是 96 * N。但是聚合所有人的签名之后的签名大小等于 96 byte + N 比特」

最终验证实际上是非常可扩展的。单个 ECADD 的计算可在约 500 ns 内完成,因此 100 万个 ECADD 的计算花费大约 500 ms。 100 万个验证者的位域只需要 128 kB。 「译者注 128 kB的计算:$1,000,000 * 1 ≈ 128 * 1000 * 8$ 」

当出现视图合并(view-merge)的情况时,可能需要在一个时隙(slot)内验证 16个 独立的签名。 这种情况下数据需求增加到仍然可控的 2 MB(大致等于 EIP-4844 每个块的最大 blob 数据和当前每个块的最大调用数据),ECADD 成本增加约 8 倍(在最差情况下,但基于巧妙的预计算技巧,不是 16 倍)。 这些都是最坏情况的数字。在常见的情况下,16 个聚合器的位域大多是一致的,因此多个聚合器在位域上花费的大部分额外成本可以被压缩。

聚合更具挑战性,但也相当可行。最近的工作极大地提高了我们对如何在一个时隙(slot)中聚合大量签名的理解。好消息是,我们完全有理由相信每个时隙(slot)处理数十万个签名是可能的,尽管仍需要更多的工作来商议和确定最佳解决方案。 这两个现实意味着我们对共识的修改不再倾向于混合共识,而是更倾向一个完全传统的拜占庭共识的最终确定区块的机制,即在开始下一个区块之前完成上一个区块。

实现单时隙最终确定性需要解决哪些关键问题?

  • 有三个主要问题:开发精确的共识算法我们不能直接使用 Tendermint 或者其他已经存在的拜占庭算法,因为我们希望在 1/3 的验证者离线的情况下仍然保持网络的活性(liveness)(传统的拜占庭共识基本上都无法满足这一点,他们在每个出块间隙都需要达成两轮至少 2/3 的投票才能实现状态推进)。我们需要添加一个分叉选择机制,节点不活动时的泄漏机制和恢复机制来涵盖这种情况。理想情况下,我们实现了最大的安全性:网络同步时的 1/2-ε 容错,不同步时的 1/3-ε 容错。

  • 确定最佳聚合策略对于尽可能高的 N,我们希望将来自 N 个验证者的签名聚合并包含到一个块中,并具有我们愿意接受的节点开销水平。

  • 确定验证者经济学即使聚合和最终验证有所改进,采用单时隙最终确定性的以太坊最终可能会支持比现在以太坊更小的理论最大验证者数量。如果这个计数最终低于想要参与的验证者数量,我们如何限制参与,我们会做出哪些牺牲?

确切的共识算法可能是什么样的? 如上所述,我们想要一个遵循 Casper FFG + LMD GHOST “最终链+乐观链”范式的共识算法,在极端情况下乐观链可以还原,但最终链永远无法还原。

这需要类似于我们今天所拥有的分叉选择机制和最终性部件(gadget)的组合,但有一个关键区别:今天,我们通常同时运行分叉选择和最终确定性部件,但在单时隙最终确定性的世界中,我们将有一个分叉选择机制或一个最终性部件运行:如果小于 2/3 的验证者在线且诚实,则采用前者;如果至少有 2/3 个验证者在线且诚实,则采用后者。算法的确切提议正在进行中,还没有正式的作品或文章发表。

制定最佳聚合策略存在哪些问题? 首先让我们看看今天的聚合器是怎么工作的。 在一个时隙内,网络中有大约 2^14 个验证者,我们将他们分成 2^6=64 个委员会,每个委员会大小大约有 2^8=256 个验证者。 首先,每个委员会的验证者在专用于该委员会的 p2p 子网中广播他们的签名。 每个委员会有 16 个指定的聚合器,每个聚合器将他们看到的所有签名组合成一个聚合签名(96 字节 + 256 位位域)。指定的聚合器将其聚合的签名发布到主子网中。 然后,区块提议者从每个委员会中取出最好的(即拥有最多参与者的)聚合签名,将其放入他们的区块中。通过视图合并 (view-merge) 分叉选择补丁,他们还将添加一个包含其他聚合签名的边缘(sidecar)对象;这可以保护视图合并机制免受不诚实的聚合器的影响——只要每个委员会中至少有一个聚合器是诚实的。

post image

如果我们想将此模型扩展到单时隙最终性,那么我们需要能够处理每个时隙内的所有 2^19 个(或我们拥有的任何数量的)验证器。这需要两种牺牲之一:

  • 增加每个委员会的验证者数量或委员会数量,或两者都增加,以适应更高的验证者数量。

  • 转向三层聚合,有两层委员会。首先,签名将被聚合成 2^8=256 组,然后是 2^14=16384 一组,最后是完整的验证器集。

前者需要更多的 p2p 网络负载,后者需要更多的延迟、更多的 p2p 子网数量带来的风险以及额外的复杂性,以确保视图合并在所有级别都免受恶意聚合器的攻击 分析这两种策略的工作正在积极进行中。

验证者经济学存在哪些问题?

今天,以太坊有 ≈ 2^19 活跃验证者(准确地说,在撰写本文时为 445,064),每个验证者质押了 32 个 ETH。到实现单时隙确定性时,这个数字可能会增加到 2^20 甚至更高。

这给我们留下了一个重要的问题:如果我们只能可行地处理每个时隙 N 个验证人的签名,但有超过 N 个验证人想要参与,我们如何确定谁留下谁离开? 「译者注:目前以太坊的 Gasper 是理论上能支持最大验证数量的区块链,这一点是当前其他 pos 共识的区块链无法比拟的。大部分采用 PBFT 类似共识的区块链往往只能支持 100 多个验证者来对网络出块进行验证。在这些 POS 区块链(如 cosmos)里往往会选择质押代币数量最多的前 N 个验证者来作为验证者集。」

这是一个重要的问题,因为任何解决方案都将涉及削弱质押系统的一个或多个属性,而这些属性在目前的以太坊共识里是被充分保护的。

好消息:启用自愿验证者余额整合的好处 因为单时隙最终确定性会消除委员会的概念(甚至 danksharding 也不使用固定规模的委员会),我们不再需要将 32 ETH 作为验证者质押代币数量的上限。出于 p2p 网络稳定性的原因,我们希望质押代币数量可以有一个更高的上限(例如 2,048 ETH)。但是如果提高质押上限,意味着基于大规模验证者的时隙将会被基于更富裕但更小规模验证者的时隙所替代。

我们可以根据 Zipf 定律来估计我们从合并富有用户的验证者时隙中获得了多少收益:拥有大致特定余额的质押者数量与该余额成反比(100-200 ETH 质押者数量是 1000-2000 ETH 质押者数量的 10 倍)。 来自信标链的早期历史数据显示,Zipf 定律的近似分布规律非常准确:

post image

假设完全按照 Zipf 定律, 今天 N 个质押者有拥有大约 32 * N * log2(N) 个 ETH,同时每个时隙所需要的验证者数量为 N * log2(N) 。将 2^ {25} ≈ 33,500,000 ETH 与此拟合,我们得到 2^{16}=65536 个质押者,它们今天在每个时隙消耗 2^20=1048576 个验证者数量。 因此,完全取消有效余额上限会将我们需要处理的每个时隙所需要的验证者数量减少到 65,536 个,而保持 2,048 ETH 的上限(从今天的 32 ETH 增加)只会增加约 1000-2000 个验证者。

「译者注:这里表达的意思是你可以质押你的以太坊质押的范围为 [32,2048] ETH。」

这只需要对聚合技术进行约 2 倍的改进或将负载增加约 2 倍,就可以处理今天的单时隙最终确定性!

作为附带的好处,这也给小质押者带来更多公平性,因为小质押者将能够质押他们所有的余额,而不是只质押其中的一部分(例如,今天拥有 48 ETH 的人只能质押 2/3 的 ETH) . 质押奖励将自动重新质押,即使是小型验证者也可以从复利中受益。

事实上,出于这个原因,现在就将上限提高到 2,048 ETH 可能是一个好主意!

但是,我们仍然需要处理以下例外情况:

(i) 验证者余额的分布变得不符合 Zipf 定律,或 (ii) 富有的验证者决定不合并,或 (iii) 我们的质押量超过了 3300 万 ETH。

我看到了两种处理这些情况的现实策略:超级委员会和验证者集大小上限。

理念一:超级委员会

由一个数万验证者组成的中型超级委员会参与每轮 Casper FFG,而不是让所有的验证者都参与,允许每轮共识在一个时隙内发生。 该技术理念最初是在这篇 ethresear.ch 帖子中介绍的。这篇文章更详细地描述了这个想法,但核心原则很简单:只有从完整验证者中随机抽取出的中型“超级委员会”(例如价值 400 万 ETH),在任何特定时间都处于活动状态。每次链达成最终确定性后,委员会都会改变,用新的随机选择的验证者替换多达 25% 的成员。

post image

在这个策略中,“谁留下谁离开?”的答案是:每个人都只停留一小部分时间,离开一小部分时间。 超级委员会有多大? 这个问题归结为一个更简单的问题:51% 攻击以太坊需要付出多大的代价?理想情况下,从攻击中被削减和不活动泄漏的 ETH 数量将大于从攻击中实际获得的收入。攻击的成本应该足够高,足以阻止或破坏那些拥有大量外部动机来破坏链的强大攻击者。 实现这一目标需要多少 ETH 的问题不可避免的是一个直觉问题。以下是我们可以提出的一些问题: 假设以太坊链受到 51% 攻击,社区需要花费几天时间协调链下治理事件以恢复,但所有 ETH 的 X% 被烧毁。X 需要多大才能对以太坊生态系统产生净效益? 假设一家大型交易所因数百万 ETH 被黑,攻击者将收益存入并获得超过 51% 的验证者。在他们所有的赃款被烧毁之前,他们能够对链发动多少次 51% 攻击? 假设 51% 攻击者开始反复重组链,只在很短的时间内捕获所有 MEV。我们希望对攻击者施加的每秒成本是多少? Justin Drake 的估计表明今天攻击比特币的成本(反复进行 51% 攻击直到社区改变 PoW 算法)约为 100 亿美元,也就是比特币市值的 1%。对以太坊发动一次 51% 攻击的成本应该是该水平的多少倍? 以太坊研究人员的内部民意调查:

post image

以 100 万的 ETH 作为攻击成本来看,如果我们只关注无延迟依赖的 51% 攻击,对应的超级委员会规模为 200 万 ETH(约 65,536 个验证者)。如果我们需要额外考虑 34% 的攻击涉及恶意验证者和网络操纵的复杂组合,那么对应的超级委员会规模为 300 万 ETH(约 97,152 个验证者)。

复杂度成本

除了降低攻击成本外,该方案的另一个主要弱点是复杂性,包括协议的复杂性和分析的复杂性。特别:

  • 我们需要数百行规范代码来选择超级委员会并轮换它们。

  • 富有的验证者会在许多验证者时隙之间分配他们的 ETH 以减少差异,因此我们将失去提高有效余额上限的一些好处。

  • 在临时的高费用或高 MEV 制度下,超级委员会可能会有意拖延最终确定性以避免被轮换出局,以便继续收取费用和 MEV。

想法 2:限定验证者集数量上限

我们可以尝试采用两种上限中的一种(或两种):

  • 限制存入的 ETH 总量

  • 限制验证者总数

任一上限都可以通过基于订单的机制(堆栈或队列)或经济机制来实现。 基于订单的方法存在很大问题。

要了解原因,请考虑两类基于顺序的策略:

  • 最老的验证者留下(OVS):如果验证者集已满,则没有其他人可以加入。

  • 最新的验证者保留(NVS):如果验证者集已满,则最旧的验证者将被踢出。

这些中的每一个都存在重大问题。OVS 有可能变成一个根深蒂固的早期质押者“王朝”,他们不能离开,否则就会失去自己的位置。这也将导致每次验证者离开时加入 MEV 拍卖,或者加入验证者集的队列非常长。所有这些影响都可能对流动质押池造成巨大压力。另一方面,NVS 存在创建永久性 MEV 拍卖的风险,这会污染链,因为被踢出的验证者会希望立即重新加入,并会与真正的新加入者抗争。

存款总额的经济上限

另一种选择是经济上限:如果有太多验证者想加入,惩罚所有新的和现有的验证者,直到有些人放弃并离开。一种简单的方法是将验证者奖励公式从其当前的 R=k√D 更改为类似:

post image

其中,R 是对表现良好的验证者的奖励(表现不佳的验证者会获得较低的奖励),而 D 是当前活跃验证者的总 ETH 余额。这条曲线大致如下:

post image

在曲线的左侧,验证者奖励的功能与今天一样。但随着总存入的 ETH 增长到数百万,奖励函数开始衰减得更快,在大约 2500 万 ETH 时,它会降至零以下。在优先费用和 MEV 高到足以诱使他们验证和弥补损失的特殊情况下,验证者可能愿意继续质押,尽管奖励为零或负。奖励曲线在 2^25(约 3350 万)ETH 处具有负无穷大的渐近线,因此无论这些外部奖励有多高,验证者集的大小都不能超过该点。 这种方法的优势在于它完全避免了奇怪的排队动态:无论平衡在哪里,它都是一个平衡;验证者集的大小是因为根据当前的验证者奖励,没有更多的验证者想加入。 主要弱点是曲线右侧存在负反馈攻击:攻击者可以进入并迅速驱逐其他验证者。但这比其他方案的问题要小,因为它只能在特殊的高 MEV 情况下发生,而且这种攻击会非常昂贵并且需要数百万 ETH。另一个重要的弱点是它有可能使我们更接近大多数验证者处于“边缘”的未来,并且由于对差异的更大容忍度,大型质押者可以大大胜过小型质押者。

验证者总数的经济上限 我们可以通过添加与验证者数量本身成比例的惩罚项来应用相同的逻辑来限制验证者总数。例如,如果我们想设置 2^17 个 活跃验证者的上限,我们可以这样做:

post image

另一种方法是设置浮动的最低质押数量:如果验证者数量超过上限,则将质押数量最少的验证者踢出。 设置浮动的最低质押数量可以缓解一种恶意攻击:富有的验证者分拆他们质押的以太坊节点,以将较小的验证者赶出去(并因此增加他们的奖励 R,因为总存款额 D 减少了)。 我们可以通过增加每个验证者的费用来缓解这种情况,目标是使他们在 Zipf 分布状态下永远无利可图。但是,如果这种机制运行时非常不符合 Zipf 规律,仍然会留下潜在漏洞。 所有这些提案都有一个重要问题是它们改变了现有保障。特别是:

  • 超级委员会将攻击链的总成本从总存款的 1/3 降低到约 1-2 百万 ETH。

  • 总存款或总验证人数量的经济上限涉及更改发行公式,减少质押者获得的奖励,并增加恶意攻击。

  • 如果我们添加浮动的最低质押数量,该最低数量可能会超过 32 ETH,这违反了目前任何拥有 32 ETH 的人都可以质押的保证。

需要仔细考虑来确定社区认为哪些权衡是最可接受的。

总结

有三个主要问题需要研究:

  • 开发精确的共识算法,以有限的方式将 BFT 启发的共识算法与分叉选择规则结合在一起。

  • 确定最佳聚合策略,在一个时隙内聚合来自尽可能多的验证者的签名。

  • 确定验证者经济学:回答如果成为验证者的需求超过系统处理验证者的能力,谁留下谁离开的问题。

(1)是一项专业的学术任务,我们知道答案的大致轮廓,主要是厘清细节问题。也就是说,加速(1)的工作,并尽快提出具体的设计提案是个不错的主张,因为它与其他研究领域(如提议者/建造者分离和 SSLE)相互作用。(2)也是一项专门的任务,尽管可能混合了不可避免的复杂性/功效权衡。(3)涉及最艰难的权衡,不仅是技术上的,而且值得社区参与。(完)

原文链接:

https://notes.ethereum.org/@vbuterin/single_slot_finality

关于 GreenPill 中文社区

Greenpill CN is a public sphere where a collective of Commons Builders explores Crypto Thoughts together.

GreenPill 中文社区是一群受 GreenPill 思想影响和感召的 Web3 爱好者、社会建设者和互联网公民自发组织的公益性社区。社区旨在建立探索公共物品治理的跨组织协作架构,在ImpactDAOs、社区间建立桥梁,共同探讨前沿理念,传播与践行 GreenPill 可再生经济学,改进协调失灵,重塑健康生态。GreenPill 中文社区已组织了GreenPill等书的翻译以及读书会,目前正在筹备聚焦去中心化社会内各领域的 DeSoc 20讲分享会、面向内外的英文播客DAOTalk、DAOTech 公共技术分享/视频等,期望通过栏目链接更多的节点,创造对外价值。

Discord : https://discord.gg/3vkuahA6

Notion : https://greenpillcn.notion.site