简化L1

CN
13小时前

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

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

这篇文章的目标是聚焦于一个同样重要且容易被低估的弹性(最终可扩展性)方面:协议的简单性

比特币最好的地方之一就是协议是多么的简单优雅

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

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

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

历史上,以太坊往往没有做到这一点(有时是因为我自己的决定),这导致了我们过度的开发支出,所有种类安全风险,以及研发文化的孤立,常常追求那些证明是虚幻的利益。这篇文章将描述五年后的以太坊如何变得接近比特币的简单性

简化共识层

3-slot 最终性模拟 3sf-mini

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

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

共识层的好处在于它与 EVM 执行相对独立,这意味着在继续进行这些类型的改进时有相对较大的自由度。更大的挑战是如何在执行层上做到同样的事情。

简化执行层

EVM 的复杂性日益增加,而其中许多复杂性被证明是多余的(在许多情况下是我自己的错):一个 256 位的虚拟机过度优化了高度特定形式的密码学,而这些形式今天变得越来越不相关,预编译则过度优化了几乎没有被使用的单一用例。

试图零散地解决这些当今现实是行不通的。为了相对较小的收益,花费了大量精力(仅部分地!)移除 SELFDESTRUCT 操作码。最近的 EOF 辩论显示了对虚拟机做同样事情的挑战。

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

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

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

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

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

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

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

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

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

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

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

将代码从绿色区域移动到黄色区域的想法在精神上类似于苹果如何通过像 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. 确保可验证性:所有三个上下文中的块都可以与根进行验证

如果使用不同的纠删码,它们至少应该是兼容的纠删码:例如,水平使用 Reed-Solomon 码,垂直使用随机线性码用于 DAS 块,其中两个码在同一域上操作。

一个共享的序列化格式

以太坊的序列化格式今天可以说只是半正式的,因为数据可以以任何格式重新序列化和广播。唯一的例外是交易的签名哈希,因为哈希需要一个标准格式。然而,在未来,序列化格式的正式程度将进一步提高,原因有二:

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

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

我提议使用 SSZ。SSZ 的特点是:

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

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

一个共享的树结构

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

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

从这里到那里

简单性在许多方面与去中心化相似。两者都是实现韧性的上游目标。明确重视简单性需要一些文化变革。其好处往往难以识别,而额外努力的成本和放弃一些闪亮特性的感觉是立竿见影的。然而,随着时间的推移,益处变得越来越明显——比特币本身就是一个很好的例子。

我提议我们 效仿 tinygrad,为长期以太坊规范设定一个明确的最大代码行数目标,目标是使以太坊的共识关键代码尽可能简单,接近比特币。与处理以太坊历史规则相关的代码将继续存在,但它应该保持在共识关键代码路径之外。与此同时,我们应该有一个普遍的理念,在可能的情况下选择更简单的选项,优先考虑封装复杂性而非系统复杂性,并做出提供清晰可读属性和保证的设计选择。

免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。

派网:注册并领取高达10000 USDT
广告
分享至:
APP下载

X

Telegram

Facebook

Reddit

复制链接