Skip to content
简化 L1

简化 L1

作者:维塔利克·布特林 2025 年 5 月 3 日 原文链接

特别感谢Fede、Danno Ferrin、Justin Drake、Ladislaus和Tim Beiko的反馈和审阅

以太坊的目标是成为世界账本:存储文明资产和记录的平台,金融、治理、高价值数据认证等的基础层。这需要两个条件:可扩展性弹性。Fusaka硬分叉旨在将L2数据可用空间增加10倍,而当前提议的2026年路线图包括对L1类似规模的增加。同时,合并升级使以太坊转向权益证明,以太坊的客户端多样性迅速改善,ZK可验证性工作、抗量子工作正在进行中,应用程序也变得越来越健壮

本文的目标是关注一个同样重要但容易被低估的弹性(最终也关系到可扩展性)方面:协议的简洁性

比特币最好的特点之一就是其协议的_美丽简洁_

有一条链,由一系列区块组成。每个区块通过哈希与前一个区块相连。每个区块的有效性通过工作量证明验证,这意味着...检查其哈希的前几个字节是否为零。每个区块包含交易。交易花费的币要么是通过挖矿过程创建的,要么是由之前的交易输出的。基本上就是这样。即使是一个聪明的高中生也能完全理解比特币协议。程序员能够将编写客户端作为一个业余项目。

保持协议简洁带来了许多好处,这些好处对比特币或以太坊成为可信中立和全球信任的基础层至关重要:

  • 它使协议更容易理解,增加了理解并能参与协议研究、开发和治理的人数。它降低了协议被高门槛技术官僚阶层主导的风险。
  • 它大大降低了创建与协议接口的新基础设施(例如新客户端、新证明器、新日志和其他开发工具)的成本。
  • 降低了长期协议维护成本
  • 降低了灾难性漏洞的风险,无论是在规范本身还是在实现中。它还使验证没有此类漏洞变得更容易。
  • 减少了社会攻击面:移动部件更少,因此需要防范特殊利益的地方也更少。

从历史上看,以太坊经常没有做到这一点(有时是因为我自己的决定),这导致了我们过多的开发支出,各种类型安全风险,以及研发文化的封闭性,往往是为了追求已被证明是虚幻的利益。本文将描述5年后的以太坊如何变得接近比特币那样简单

简化共识层

3sf-mini中模拟的 3 槽位最终确定性

新的共识层努力(历史上称为"beam chain")旨在利用我们在过去十年中在共识理论、ZK-SNARK开发、质押经济学和其他领域的所有学习成果,为以太坊创建一个长期最优的共识层。相比现状的信标链,这个共识层有望变得更加简单。特别是:

  • 3 槽位最终确定性的重新设计移除了单独的槽位和周期的概念、委员会洗牌以及许多其他与高效处理这些机制相关的协议规范部分(以及其他细节,例如同步委员会)。3 槽位最终确定性的基本实现可以用大约200行代码完成。与Gasper不同,3 槽位最终确定性还具有接近最优的安全属性。
  • 同时活跃的验证者数量减少意味着使用更简单的分叉选择规则实现变得更安全。
  • 基于STARK的聚合协议意味着任何人都可以成为聚合器,我们不必担心信任聚合器、为重复的位域过度支付等问题。聚合加密本身的复杂性确实很大,但至少它是高度封装的复杂性,这对协议的系统性风险要低得多。
  • 上述两个因素也可能使更简单和更健壮的p2p架构成为可能。
  • 我们有机会重新思考验证者入场、退出、提款、密钥转换、不活跃泄漏和其他相关机制的工作方式,并简化它们——既减少代码行数(LoC),又创建更清晰的保证,例如弱主观性周期是什么。

共识层的优势在于它与EVM执行相对分离,这意味着有相对广泛的自由度可以继续进行这些类型的改进。更困难的挑战是如何在执行层上做同样的事情。

简化执行层

EVM 的复杂性正在不断增长,而这种复杂性中的很多部分已经被证明是不必要的(在许多情况下是我自己的错):一个 256 位的虚拟机过度优化了特定形式的密码学,而这些密码学今天变得越来越不相关,以及预编译功能过度优化了几乎不被使用的单一用例。

试图片面地解决这些当前的现实问题是行不通的。我们花费了大量努力(仅部分!)移除 SELFDESTRUCT 操作码,但收益相对较小。最近的 EOF 争论显示了对虚拟机进行同样改变的挑战。

作为替代方案,我最近提出了一种更激进的方法:不是为了 1.5 倍的收益而对 EVM 进行中等规模(但仍然具有破坏性)的更改,而是为了 100 倍的收益而过渡到一个新的、更好、更简单的虚拟机。像合并(Merge)一样,我们有更少的破坏性变更点,但我们使每一个变更更有意义。具体来说,我建议我们用 RISC-V 替换 EVM**,或者用另一个虚拟机替换,该虚拟机是以太坊 ZK-证明器将使用的虚拟机。**这给我们带来:

  • 效率的根本提升,因为(在证明器内部)智能合约执行将直接运行,无需解释器开销。Succinct 的数据显示,在许多情况下可能有 100 倍以上的性能提升。
  • 简单性的根本提升:与 EVM 相比,RISC-V 规范极其简单。其他替代方案(例如 Cairo)也同样简单。
  • 所有促使 EOF 的好处(例如代码段、更友好的静态分析、更大的代码大小限制)
  • 开发者有更多选择:Solidity 和 Vyper 可以添加后端以编译到新的虚拟机。同时,如果我们选择 RISC-V,那么使用更主流语言编写的开发者将能够将他们的代码移植到该虚拟机上。
  • 移除对大多数预编译的需求,可能除了高度优化的椭圆曲线操作(尽管一旦量子计算机出现,这些也将消失)

这种方法的主要缺点是,与今天已经准备好的 EOF 不同,使用新虚拟机将需要相对更长的时间才能让这些好处惠及开发者。我们可以通过添加一些有限但高价值的 EVM 改进(例如合约代码大小限制增加、DUP/SWAP17-32)来缓解这一点,这些改进可以在短期内实施。

这给我们带来了一个更简单的虚拟机。主要挑战是:我们如何处理现有的 EVM?

虚拟机过渡的向后兼容性策略

对EVM进行有意义的简化(甚至是_在不增加复杂性的情况下改进_)的最大挑战是如何平衡实现预期目标与为现有应用程序保持向后兼容性。

首先需要理解的重要一点是:没有单一方式来界定什么是"以太坊代码库"(即使在单个客户端内部)

目标是最小化绿色区域:节点_必须_运行以参与以太坊共识的逻辑:计算当前状态、证明、验证、FOCIL、"普通"区块构建。

橙色区域无法减少:如果执行层功能(无论是虚拟机、预编译合约或其他机制)从协议规范中移除或其功能被更改,关心处理历史区块的客户端将不得不保留它——但重要的是,新客户端(或ZK-EVM、形式化证明工具)可以完全忽略橙色区域。

新类别是黄色区域:对于_理解和解释_当前链或_最优区块构建_非常有价值的代码,但不属于共识的一部分。今天存在的一个例子是Etherscan(以及一些区块构建者)对ERC-4337用户操作的支持。如果我们用链上RISC-V实现替换某些大型以太坊功能(例如EOA,包括它们对各种旧交易类型的支持),那么共识代码将大大简化,但专门的节点可能会继续使用它们完全相同的代码来解释这些功能。

重要的是,橙色和黄色区域是封装的复杂性,任何想要理解协议的人都可以跳过它们,以太坊的实现可以自由地跳过它们,而且这些区域中的任何错误都不会带来共识风险。这意味着橙色和黄色区域的代码复杂性比绿色区域的代码复杂性有更少的缺点。

将代码从绿色区域移动到黄色区域的想法在精神上类似于苹果如何通过Rosetta等转译层确保长期向后兼容性。

Ipsilon团队最近的文章启发,我提出以下虚拟机更改过程(以EVM到RISC-V为例,但它也可以用于例如EVM到Cairo,甚至是RISC-V到更好的技术):

  1. 我们要求任何新的预编译合约都使用规范的链上RISC-V实现编写。这让生态系统热身并开始使用RISC-V作为虚拟机。
  2. 我们引入RISC-V作为选项,让开发者可以与EVM一起编写合约。协议原生支持RISC-V和EVM,用一种或另一种编写的合约可以自由地相互交互。
  3. 我们替换所有预编译合约,除了椭圆曲线操作和KECCAK(因为这些需要真正最优的速度),使用RISC-V实现。也就是说,我们进行一次硬分叉,移除预编译合约,同时将该地址的代码(类似DAO分叉方式)从空白更改为RISC-V实现。RISC-V虚拟机非常简单,即使我们在这里停止,这也是一个净简化。
  4. 我们在RISC-V中实现一个EVM解释器(无论如何这都会发生,因为ZK证明系统的需要)并将其作为智能合约推送到链上。在初始发布几年后,现有的EVM合约切换到通过该解释器处理。

一旦完成第4步,许多"EVM的实现"将会保留并用于优化区块构建、开发者工具和链分析目的,但它们将不再需要成为_关键共识规范_的一部分。以太坊共识将"原生"只理解RISC-V

通过共享协议组件来简化

第三种也是最容易被低估的降低协议总体复杂性的方法是尽可能在堆栈的不同部分共享同一标准。在不同地方使用不同协议来完成相同任务通常几乎没有或完全没有益处,但这种模式仍然存在,主要是因为负责协议路线图不同部分的人员之间缺乏交流。以下是几个具体例子,说明我们可以通过确保组件在整个堆栈中最大限度地共享来简化以太坊。

单一共享的擦除码(纠删码)

我们在三个地方需要擦除码:

  • 数据可用性采样 - 客户端验证区块是否已被发布
  • 更快的点对点(P2P)广播 - 节点在接收到n/2个(共n个)片段后能够接受区块,创造延迟减少和冗余之间的最佳平衡
  • 分布式历史存储 - 以太坊的历史的每一部分被存储在多个数据块中,使得(i)这些数据块可以被独立验证,以及(ii)每组中的n/2个数据块可以恢复剩余的n/2个数据块,大大降低任何单个数据块丢失的风险

如果我们在这三个用例中使用相同的擦除码(无论是Reed-Solomon码、随机线性码或其他),我们会获得一些重要的优势:

  1. 最小化总代码行数
  2. 提高效率,因为如果单个节点必须为其中一个用例下载区块的单个片段(而不是整个区块),那么这些数据可以用于其他用例
  3. **确保可验证性:**所有三种情况下的数据块都可以根据根哈希进行验证

如果使用不同的擦除码,它们至少应该是_兼容的_擦除码:例如,数据可用性采样(DAS)数据块的水平Reed-Solomon码和垂直随机线性码,两种码在相同的域上操作。

一种单一共享的序列化格式

以太坊的序列化格式今天可以说只是半确立的,因为数据可以被重新序列化并以任何格式广播。唯一的例外是交易的签名哈希,因为在那里需要一个规范格式进行哈希。然而,在未来,序列化格式的确立程度将进一步增加,原因有两个:

  • 随着完全账户抽象(EIP-7701),完整的交易内容将对虚拟机可见
  • 随着燃气限制的提高,执行区块数据将需要放入blob(数据块)中

当这种情况发生时,我们有机会统一以太坊当前需要的三个层次的序列化:(i) 执行层,(ii) 共识层,(iii) 智能合约调用ABI。

我提议我们使用SSZ。SSZ是:

  • 易于解码,包括在智能合约内部(因为它基于4字节设计,特殊情况更少)
  • 在共识层已被广泛使用
  • 与现有ABI高度相似,使工具相对容易适应

已经有努力迁移更全面地使用SSZ;我们在规划未来升级时应该考虑这些努力,并在此基础上进行构建。

一个单一共享树

一旦我们从EVM迁移到RISC-V(或其他替代的最小虚拟机),即使在平均情况下,hexary Merkle Patricia树将成为证明区块执行的最大瓶颈。迁移到基于更优化哈希函数的二叉树将大大提高证明程序效率,同时也为轻客户端和其他用例减少数据成本。

在进行这一迁移时,我们也应该为共识层采用相同的树结构。这确保了以太坊的全部内容,无论是共识还是执行层,都可以使用相同的代码进行访问和解释。

从这里到那里

简洁性在许多方面与去中心化相似。两者都是实现抗风险能力这一目标的基础要素。明确重视简洁性需要一些文化上的改变。简洁性的好处通常难以量化,而额外努力和放弃一些闪亮功能的成本则会立即被感受到。然而,随着时间推移,这些好处会变得越来越明显——比特币本身就是一个极好的例子。

我建议我们效仿tinygrad的做法为以太坊长期规范设定明确的代码行数上限,目标是使以太坊的共识关键代码接近比特币的简洁性。处理以太坊历史规则的代码将继续存在,但它应该保持在共识关键代码路径之外。与此同时,我们应该秉持一种普遍的理念,即在可能的情况下选择更简单的方案,优先选择将复杂性封装起来而不是让其渗透到整个系统中,并做出能提供清晰可辨的属性和保证的设计选择。

ETHStudy (An Ethereum Ecosystem Initiative)
Supported by Uweb(University of Web3)