原文作者|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 目前有三种合理的策略:
对於某些应用程式(例如ENS、密钥存储,部分支付协议),12 秒区块时间已经足够。对於那些不适用的应用程序,唯一的解决方案是epoch-and-slot架构。在三种情况下,「epoch」是以太坊的SSF,但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 开发人员的工作。