原文作者 |Vitalik
编译 | Odaily星球日报南枳
一个好的区块链用户体验的重要属性之一是快速的交易确认时间。如今,以太坊相比五年前已经有了很大的改进。得益于EIP-1559和转PoS(The Merge)后稳定的区块时间,用户在L1上发送的交易通常可以在5-20秒内确认,大体与使用信用卡支付的体验相当。然而,进一步改善用户体验是有价值的,某些应用甚至要求数百毫秒甚至更短的延迟。本文将探讨以太坊(改进交易确认时间)的一些实用选项。
现有想法和技术的概述
单槽最终性
目前,以太坊的Gasper共识使用单个槽(Slot)和Epoch的架构。每12秒一个槽,一部分验证者会对链的头部进行投票,并在32个槽(6.4分钟)内,所有验证者都有机会投票一次。这些投票然后被重新解释为一种类似于PBFT的共识算法中的消息,在两个Epoch(12.8分钟)之后,给予一种称为最终性的非常强的经济保证。
过去几年中,我们对当前的方法越来越不满意。主要原因有两点,首先这种方法很复杂,槽对槽投票机制和Epoch对Epoch最终性机制之间存在许多交互错误,其次12.8分钟太长了,没人愿意等那么久。
单槽最终性(Single Slot Finaty,SSF)通过一种类似于Tendermint共识的机制取代了这种架构,其中块N在块N+1生成之前被最终确定。与Tendermint的主要区别是我们保留了“非活跃泄漏(inactivity leak)”机制,这允许链在超过1/3的验证者离线时继续运行并恢复。
单槽最终性的主要挑战是,这意味着每个以太坊质押者每12秒需要发布两条消息,这对链来说是很大的负载。有一些巧妙的想法可以缓解这个问题,包括最近的Orbit SSF提案。虽然这显著加快了“最终性”来提升用户体验,但并未改变用户需要等待5-20秒的事实。
Rollup 预确认
过去几年,以太坊一直遵循以 rollup 为中心的路线图,设计以太坊基础层(L1),以支持数据可用性和其他功能,然后这些功能可供 L2 协议(如 rollups、validiums 和 plasmas)使用,能够在更大规模上为用户提供与以太坊同等水平的安全性。
这在以太坊生态系统内造成了关注点的分离:以太坊 L1 专注于抵审查、可靠、稳定,以及维护和改进某个基础层核心功能,而 L2专注于通过不同的文化和技术更直接地接触用户。但如果沿着这条路径前进,一个不可避免的问题出现了:L2 希望为用户提供比 5-20 秒更快的确认。
到目前为止,至少在理论上,创建自己的“去中心化排序器”网络是 L2 的责任。一小群验证者可能每几百毫秒就为区块签名一次,并在这些区块后面投入他们的质押资产。最终,这些 L2 区块的头文件会发布到 L1。
但L2 验证者集可以进行“欺诈”:他们可以先签署区块 B1,然后再签署一个冲突的区块 B2 并在 B1 之前提交到链上。但如果他们这样做,他们会被查验出来并失去质押资产。实际上我们已经看到了中心化版本的实际案例,但另一方面 rollup 在开发去中心化排序网络方面进展缓慢。你可以说要求所有L2都进行去中心化排序是不公平的:我们这是在要求rollup做与创建一个全新的L1几乎相同的工作。因此,Justin Drake一直在推广一种方法,让所有L2(以及L1)都能使用一个以太坊范围内共享的预确认机制:基础预确认。
基础预确认
基础预确认(Based preconfirmations)的方法假设以太坊提议者(Ethereum proposers)是与 MEV 相关的高度复杂的参与者。基于预确认的方法通过激励这些复杂的提议者接受提供预确认服务的责任来利用这种复杂性。
该方法的基本思想是创建一个标准化协议,用户可以提供额外费用以确保交易会被包括在下一个区块中的即时保证,以及对执行该交易结果的声明。如果提议者违反了对任何用户做出的任何承诺,他们可以被罚没。
如所述,基于预确认为 L1 交易提供保证。如果 rollups 是“基于”的,那么所有 L2 区块都是 L1 交易,因此相同的机制可以用于为任何 L2 提供预确认。
我们实际在看什么?
假设我们实现了单槽最终性。我们使用类似于 Orbit 的技术来减少每个槽签署的验证者数量,但不会减少太多,以便我们也可以在减少 32 ETH 质押最低限度的关键目标上取得进展。槽时长(slot time)可能会增加到 16 秒,然后我们使用 rollup 预确认或基础预确认,为用户提供更快的确认。最后我们获得了什么:一个epoch-slot架构。
有一个深刻的哲学原因,为什么epoch-and-slot架构似乎如此难以避免:与就某件事达成最大程度的“经济最终性”协议相比,就某件事情达成大致一致所需的时间更少。
一个简单的原因是节点数量。虽然由于超优化的 BLS 聚合和即将出现的 ZK-STARKs,旧的线性去中心化/最终性时间/开销权衡现在看起来温和了,以下原因不可忽视:
- “近似共识”只需要少量节点,而经济最终性需要大部分节点。
- 一旦节点数量超过某个规模,你需要花费更多时间来收集签名。
在今天的以太坊中,12 秒槽划分为三个子槽:区块发布和分发、证明、证明聚合。如果证明者数量大大减少,我们可以减少到两个子槽并使用 8 秒槽时间。另一个、更实际的更大因素是节点的“质量”。另一个更大的因素是节点的“质量”。如果我们也可以依靠专业化的节点子集来达成近似协议(并且仍然使用完整的验证器集来确定最终性),我们可以将其降至约2秒。
因此在我看来,epoch-and-slot架构显然是正确的,但并非所有epoch-and-slot体系结构都是平等的,更充分地探索设计空间是有价值的。值得深入研究的方向不是像Gasper那样紧密结合在一起,而在两种机制之间有更强的关注点分离。
L2 应该怎么做?
在我看来,L2 目前有三种合理的策略:
- 在技术上和精神上都是“based”的。也就是说,他们优化以太坊基础层技术属性及其价值观(高度去中心化、抗审查等)。最简单形式下,你可以将这些 rollup 视为“品牌分片”,但它们也可以拥有更大的野心,在新的虚拟机设计和其他技术改进上进行大量实验。
- 成为“带区块链脚手架的服务器”并充分利用它。如果你从服务器开始,然后添加STARK 有效性证明以确保服务器遵循规则;确保用户退出或强制交易的权利;集体选择的自由,通过协调的大规模退出或通过改变排序者的投票,那么你已经获得了上链的大部分好处,同时保留了服务器的大部分效率。
- 折衷方法:一个拥有一百个节点的快速链,以太坊提供额外的互操作性和安全性。这是许多 L2 项目当前实际的路线图。
对于某些应用程序(例如 ENS、密钥存储,部分支付协议),12 秒区块时间已经足够。对于那些不适用的应用程序,唯一的解决方案是epoch-and-slot架构。在三种情况下,“epoch”是以太坊的 SSF,但slot在上述三种情况下各不相同:
- 一个以太坊原生的epoch-and-slot架构
- 服务器预确认
- 委员会预确认
一个关键问题是,我们能在第1类中做到多好?特别是,如果它变得非常好,那么感觉第3类的意义就不那么大了。因为所有“based”的方案都不适用于如 plasmas 和 validiums 之类的链下数据 L2,因此第2类将永远存在。如果一个以太坊原生的epoch-and-slot架构可以降低到 1 秒的slot时间,那么第3类的空间就会变得小得多。
今天,我们离这些问题的最终答案还很远。一个关键问题是:区块提议者会变得多么复杂,这仍然是一个存在相当大不确定性的领域。像 Orbit SSF 这样的设计非常新颖,因此例如将 Orbit SSF 作为epoch-and-slot中的epoch等方案的设计空间仍值得充分探索。我们拥有的选项越多,我们可以为 L1 和 L2 的用户做得越好,我们可以简化 L2 开发人员的工作。