Vitalik: 简化以太坊 L1

文章探讨了以太坊协议的简化,旨在提高其可扩展性和弹性。核心观点包括简化共识层(如采用3-slot finality)、用更简单高效的虚拟机(如RISC-V)替代EVM,以及在协议的不同部分之间共享标准,如统一的擦除码、序列化格式和树结构。通过这些简化措施,以太坊有望降低开发和维护成本,减少漏洞风险,并实现更广泛的社区参与。

简化以太坊 L1

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

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

本文的目标是揭示弹性(并最终实现可扩展性)的一个方面,它同样重要,并且很容易被低估:协议的简单性

比特币最棒的事情之一是协议的 极致简约:

存在一条链,它由一系列区块组成。每个区块通过哈希连接到前一个区块。每个区块的有效性都通过工作量证明来验证,这意味着...检查其哈希的前几个字节是否为零。每个区块都包含交易。交易花费通过挖矿过程创建的,或由先前交易输出的代币。这差不多就是全部了。即使是一个聪明的高中生也能够完全理解比特币协议。程序员可以将编写客户端作为业余项目。

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

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

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

简化共识层

3sf-mini 中模拟 3 插槽最终性

新的共识层工作(历史上称为“beam chain”)旨在利用我们在过去十年中在共识理论、ZK-SNARK 开发、质押经济学和其他领域的所有经验,为以太坊创建一个长期最佳的共识层。这个共识层的位置很好,可以比现在的信标链简单得多。特别是:

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

共识层的好处是它与 EVM 执行的联系相对较少,这意味着继续进行这些类型的改进有相对较广的自由度。更艰巨的挑战是如何在执行层上做同样的事情。

简化执行层

EVM 的复杂性日益增加,并且许多复杂性已被证明是不必要的(在许多情况下是我自己的错误):一个 256 位的虚拟机,它过度优化了高度特定的密码学形式,而如今这种密码学形式变得越来越不重要,并且预编译过度优化了几乎没有被使用的单一用例。

尝试零敲碎打地解决这些现实是行不通的。花费了大量的精力才(仅仅部分地!)删除 SELFDESTRUCT 操作码,而收益相对较小。最近的 EOF 辩论表明了对 VM 做同样事情的挑战。

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

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

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

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

VM 转换的向后兼容性策略

有意义地简化(甚至 改进而不复杂化)EVM 的任何部分的最大挑战是,如何在实现所需目标与为现有应用程序保留向后兼容性之间取得平衡。

首先要理解的重要一点是:没有 一种单一的 方法可以定义什么是“以太坊代码库”(即使在单个客户端中也是如此)

目标是最大限度地减少绿色区域:节点 必须 运行才能参与以太坊共识的逻辑:计算当前状态、证明、验证、FOCIL、“vanilla”区块构建。

橙色区域无法减少:如果从协议规范中删除执行层功能(无论是 VM、预编译还是其他机制),或更改其功能,则关心处理历史区块的客户端将必须保留它 - 但重要的是,新客户端(或 ZK-EVM 或形式证明器)可以完全忽略橙色区域。

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

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

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

我建议,受到 Ipsilon 团队最近的文章 的启发,采用以下 VM 更改流程(以 EVM 到 RISC-V 为例,但它也可以用于例如 EVM 到 Cairo,甚至 RISC-V 到更好的东西):

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

一旦完成步骤 4,许多“EVM 的实现”将保留并用于优化区块构建、开发人员工具和链分析目的,但它们不再需要成为 关键共识规范 的一部分。以太坊共识将“本地”仅理解 RISC-V

通过共享协议组件来简化

减少总协议复杂性的第三种也是最容易被低估的方法是在堆栈的不同部分尽可能多地共享一个标准。使用不同的协议在不同的地方做同样的事情通常几乎没有或没有任何好处,但是这种模式仍然会出现,主要是因为协议路线图的不同部分之间没有相互沟通。以下是一些具体的例子,说明我们可以通过确保组件在堆栈中最大程度地共享来简化以太坊。

单一共享纠删码

我们需要在三个地方使用纠删码:

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

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

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

如果使用不同的纠删码,它们至少应该是 兼容的 纠删码:例如,对于 DAS 块,水平方向的 Reed-Solomon 码和垂直方向的随机线性码,其中这两个码在同一字段上运行。

单一共享排序格式

如今,以太坊的序列化格式可以说只是半固化,因为数据可以以任何格式重新序列化和广播。唯一的例外是交易的签名哈希,因为那里需要规范格式才能进行哈希。然而,未来,序列化格式的固化程度将会进一步提高,原因有二:

  • 借助 完全帐户抽象 (EIP-7701),完整的交易内容将对 VM 可见
  • 随着 gas 限制的提高,执行区块数据将需要放入 blob 中

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

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

  • 易于解码,包括在智能合约内部(由于其基于 4 字节的设计和较少的边缘情况)
  • 已在共识层中广泛使用
  • 与现有 ABI 高度相似,使得工具相对容易适应

已经有一些 努力 迁移 到更完整的 SSZ;在规划未来的升级时,我们应该牢记这些努力,并在它们的基础上进行构建。

单一共享树

一旦我们从 EVM 迁移到 RISC-V(或替代的最小 VM),十六进制 Merkle Patricia 树将成为证明区块执行的最大瓶颈,即使在平均情况下也是如此。迁移到基于更优化的哈希函数的 二叉树 将极大地提高证明器的效率,此外还可以降低轻客户端和其他用例的数据成本。

当我们这样做时,我们还应该对共识层使用相同的树结构。这确保了可以使用相同的代码访问和解释以太坊的所有内容,无论是共识还是执行。

从这里到那里

简单性在很多方面都类似于去中心化。两者都是弹性的上游。明确重视简单性需要一些文化变革。好处通常是不可理解的,而额外努力和拒绝某些闪亮功能的成本会立即感受到。然而,随着时间的推移,好处变得越来越明显 - 而比特币本身就是一个极好的例子。

我建议我们遵循 tinygrad 的领导,并为长期以太坊规范设定一个明确的最大代码行数目标,目标是使以太坊共识关键代码接近比特币的简单程度。必须处理以太坊历史规则的代码将继续存在,但它应该留在共识关键代码路径之外。与此同时,我们应该有一种普遍的精神,即在可能的情况下选择更简单的选项,偏爱封装的复杂性而不是系统的复杂性,并做出提供清晰可读属性和保证的设计选择。

  • 原文链接: vitalik.eth.limo/general...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Vitalik Buterin
Vitalik Buterin
https://vitalik.ca/