从时隙到纪元:以太坊SSF的挑战
作者:维塔利克·布特林 2024年6月30日 原文链接
特别感谢 Dankrad Feist 和 carlbeek 对本文初稿提供的宝贵意见。
以太坊目前正在开发单时隙确定性(SSF),这是一项重要的升级,旨在将确认时间从传统的15分钟减少到12秒。这项改进意义重大,它将使以太坊在用户体验和安全性方面都有显著提升。
然而,SSF的一个主要挑战是:它需要修改以太坊当前的"时隙到纪元"模型。目前,单个时隙中的验证者仅代表了所有验证者的一小部分(每个时隙约32个验证者),而最终确定性的决定是在纪元层面进行的,纪元包含了32个时隙。这种模式允许在每个时隙中只有一小部分验证者保持活跃,同时仍然保持强大的最终确定性。但在SSF中,我们需要在每个时隙都实现最终确定性,这意味着我们需要在每个时隙都有足够多的验证者参与。
由此引发了一个关键问题:我们究竟应该如何在SSF中组织时隙和纪元?这个问题的复杂程度远超表面所见。
深入探讨纪元和时隙:为以太坊用户提供更快交易确认时间的方法
2024年6月30日 查看所有文章
良好的区块链用户体验的重要特性之一是快速的交易确认时间。如今,与五年前相比,以太坊已经有了很大改善。这要归功于EIP-1559和合并后稳定的出块时间的结合,用户在L1上发送的交易可以在5-20秒内可靠地得到确认。这大致可以与使用信用卡支付的体验相媲美。然而,进一步改善用户体验仍然具有价值,而且有些应用程序甚至明确要求延迟时间在数百毫秒或更短的量级。本文将探讨以太坊可以采取的一些可行方案。
现有想法和技术概述
单时隙确定性
如今,以太坊的Gasper共识使用时隙和纪元架构。每12秒一个时隙,一部分验证者会对链头发布投票,在32个时隙(6.4分钟)的过程中,所有验证者都有一次投票机会。这些投票随后被重新解释为类似PBFT共识算法中的消息,经过两个纪元(12.8分钟)后,便能提供一个极其强健的经济最终确定性保证。
在过去几年中,我们对当前的方法越来越不满意。主要原因是:(i)它过于复杂,时隙级投票机制和纪元级最终确定性机制之间存在许多交互性bug,(ii)12.8分钟的时间太长,没有人愿意等待这么久。
单时隙确定性用一个更接近Tendermint共识的机制替代了这种架构,在该机制中,区块N+1生成之前,区块N就已经达到最终确定性。与Tendermint的主要区别在于我们保留了"不活跃泄漏"机制,该机制允许链在超过1/3的验证者离线的情况下继续运行并恢复。
提议的单时隙确定性设计的示意图
SSF 的主要挑战在于,从简单来说,似乎意味着每个以太坊质押者都需要每 12 秒发布两条消息,这对于链来说将是非常大的负担。目前已经有一些巧妙的想法来缓解这个问题,包括最近提出的 Orbit SSF 方案。但即便如此,虽然这通过加快"最终确定性"的速度显著改善了用户体验,但用户仍然需要等待 5-20 秒这一事实并没有改变。
Rollup 预确认
在过去几年中,以太坊一直遵循着以 rollup 为中心的路线图,围绕支持数据可用性和其他功能设计以太坊基础层("L1")。这些功能随后可以被rollups(以及validiums和plasmas)等层 2协议使用,从而为用户提供与以太坊相同级别的安全性,但具有更高的扩展性。
这在以太坊生态系统中创造了一种关注点分离:以太坊 L1 可以专注于实现抗审查、可靠、稳定,并维护和改进某些基础核心功能,而 L2 则可以通过不同的文化和技术权衡,更直接地服务用户。但是如果沿着这条路走下去,就会遇到一个不可避免的问题:L2 需要服务那些希望获得确认时间远快于 5-20 秒的用户。
到目前为止,至少在理论上,创建自己的"去中心化交易排序"网络一直是 L2 的责任。一个较小的验证者群体会对区块进行签名,可能每几百毫秒一次,并且他们会用自己的"质押"来支持这些区块。最终,这些 L2 区块的头部信息会发布到 L1。
L2 验证者集合可能会作弊:他们可能先签署区块 B1,然后再签署一个冲突的区块 B2,并在 B1 之前将其提交到链上。但如果他们这样做,他们会被发现并失去质押存款。在实践中,我们已经看到了这种中心化的情况,但 Rollup 在开发去中心化排序网络方面进展缓慢。你可以说要求所有 L2 都实现去中心化排序是一个不公平的要求:这实际上是在要求 Rollup 完成与创建一个全新 L1 几乎相同的工作量。 正是基于这个原因以及其他原因,Justin Drake 一直在推广一种方案,让所有 L2(以及 L1)都能访问一个共享的以太坊范围内的预确认机制:Based 预确认。
Based 预确认
Based 预确认方法假设以太坊区块提议者将因 MEV 相关原因而变得高度复杂(参见这里关于我对 MEV 的解释,以及执行票据系列提案)。Based 预确认方法利用这种复杂性,通过激励这些复杂的区块提议者接受提供预确认即服务(preconfirmations-as-a-service)的责任。
基本思想是创建一个标准化协议,用户可以通过该协议提供额外费用,以换取交易将被包含在下一个区块中的即时保证,同时可能包括关于执行该交易结果的声明。如果区块提议者违反了他们对任何用户的承诺,他们可能会被惩罚。
如上所述,Based 预确认为 L1 交易提供保证。如果 Rollup 是"Based"的,那么所有 L2 区块都是 L1 交易,因此同样的机制可以用于为任何 L2 提供预确认。
我们实际上在看什么?
假设我们实现单时隙确定性。我们使用类似 Orbit 的技术来减少每个时隙签名的验证者数量,但不会减少太多,这样我们也可以在降低 32 ETH 质押最低要求这一关键目标上取得进展。因此,时隙时间可能会增加到 16 秒。然后我们使用 rollup 预确认或基于预确认的方式,为用户提供更快的保证。现在我们得到了什么?一个纪元和时隙的架构。
"它们是同一张图片"这个 meme 现在已经被过度使用了,所以我就放一张我几年前画的描述 Gasper 时隙和纪元架构的旧图,以及一张 L2 预确认的图表并排放在一起,希望这能表达我的观点。
为什么纪元和时隙的架构似乎如此难以避免,这背后有一个深层的哲学原因:就某事达成近似共识所需的时间,天然少于达成最大程度"经济上的最终确定性"共识所需的时间。
一个简单的原因是节点数量。虽然由于高度优化的 BLS 聚合以及即将到来的 ZK-STARKs,原有的去中心化/最终确定性时间/开销权衡看起来不那么严重了,但以下观点仍然基本成立:
- "近似共识"只需要少数节点,而经济上的最终确定性需要相当大比例的所有节点。
- 一旦节点数量超过某个规模,你就需要花费更多时间来收集签名。
在当今的以太坊中,一个12秒的时隙被分为三个子时隙,分别用于(i)区块发布和分发、(ii)见证和(iii)见证聚合。如果验证者数量大幅减少,我们可以降至两个子时隙,实现8秒的时隙时间。另一个更现实且更重要的因素是节点的"质量"。如果我们能依靠一部分专业化的节点来达成近似共识(同时仍使用全部验证者集合来实现最终确定性),我们有可能将其降至约2秒。
因此,我认为 (i)时隙和纪元架构显然是正确的,但同时(ii)并非所有时隙和纪元架构都是平等的,在更充分地探索这个设计空间方面仍有价值。特别是,值得探索那些不像 Gasper 那样紧密交织的方案,而是在两种机制之间有更强的关注点分离。
L2 应该做什么?
在我看来,目前 L2 有三种合理的策略:
在技术和精神层面都要"基于"以太坊。也就是说,它们要优化成为以太坊基础层技术特性和价值观(高度去中心化、抗审查等)的传递通道。从最简单的形式来看,你可以将这些 Rollup 视为"带品牌的分片",但它们也可以比这更有野心,在新的虚拟机设计和其他技术改进方面进行大量实验。
坦然接受"具有区块链框架的服务器"的定位,并充分发挥其优势。如果你从一个服务器开始,然后添加(i)STARK 有效性证明以确保服务器遵守规则,(ii)保障用户退出或强制交易的权利,可能还有(iii)集体选择的自由(通过协调一致的大规模退出或通过投票改变排序器),那么你就已经获得了链上运行的大量好处,同时保持了服务器的大部分效率。
折中方案:一个百节点的快速链,由以太坊提供额外的互操作性和安全性。这是目前许多 L2 项目事实上的发展路线图。
对于某些应用(例如 ENS、密钥库、某些支付),12秒的出块时间就足够了。对于那些不够的应用,唯一的解决方案是时隙和纪元架构。在所有三种情况下,"纪元"都是以太坊的单时隙确定性(SSF)(也许我们可以将这个缩写重新解释为"单时隙"以外的含义,例如可以是"安全快速最终确定性")。但是"时隙"在上述三种情况下各不相同:
- 基于以太坊原生的时隙和纪元架构
- 服务器预确认机制
- 委员会预确认机制
一个关键问题是,我们能把第(1)类做得多好?特别是,如果它变得真的很好,那么第(3)类似乎就不那么重要了。第(2)类将永远存在,至少是因为任何"基于"的方案都不适用于等离子体和validium这样的链下数据L2。但是,如果以太坊原生的时隙和纪元架构能够将"时隙"(即区块预确认)时间缩短到1秒,那么第(3)类的空间就会变得相当小。
今天,我们还远未找到这些问题的最终答案。一个关键问题——区块提议者会变得多么复杂——仍然存在很大的不确定性。像Orbit SSF这样的设计非常新颖,这表明以Orbit SSF作为纪元的时隙和纪元设计空间仍然未被充分探索。我们拥有的选项越多,我们就能为L1和L2上的用户提供更好的服务,也能更好地简化L2开发者的工作。