本文介绍了Ethrex L2,一个使用Rust实现的以太坊协议,它同时作为L1执行客户端和ZK-rollup客户端运行。Ethrex L2具有简单、极简和模块化的特点,旨在降低复杂性带来的成本。它支持多种证明后端,并提供中心化、Validium和Based Rollup等多种部署选项,以满足不同的需求。
以太坊 Layer 2 的格局已经发生了巨大的变化。最初的实验性扩展方案已经成熟为一个由 rollups 组成的多元化生态系统,每个 rollup 在安全性、去中心化和性能方面都做出了独特的架构选择。Optimistic rollups 用立即最终性换取了简单性。ZK rollups 投资于密码学的复杂性,以实现更快的结算。Based rollups 直接从 L1 验证者那里继承了以太坊的去中心化特性。
每种方法都反映了不同的优先级。每种方法都有其自身的权衡。
这篇文章介绍了 ethrex L2,一个以不同优先级构建的 rollup 堆栈:简单性、极简主义和模块化;目标是抵消复杂性带来的成本,并随着时间的推移而复合。
Ethrex 是以太坊协议的 Rust 实现,具有两种运行模式:
ethrex L1 作为一个标准的以太坊执行客户端运行,与 Geth、Nethermind、Reth 等一起参与网络。它实现了以太坊规范,重点是正确性和最小的资源使用。
ethrex L2 作为一个 ZK-rollup 客户端运行,其中区块执行使用零知识证明进行证明,并在以太坊 L1 上进行验证。L2 通过密码学验证而不是信任假设来继承以太坊的安全保证。
Ethrex 与众不同之处在于,从一开始它就被构想为两者,而不是带有 L2 的 L1 客户端,或者恰好与 L1 实现共享代码的 L2 堆栈。这种双重性质是有意的,它影响了整个架构决策。
该代码库大约有 62,000 行代码,包括 EVM 实现、L2 堆栈、ZK prover 集成、TEE 证明代码和一个以太坊 SDK。 其他执行客户端通常在其主存储库中超过 200,000 行,通常还有其他依赖项将其推高到超过 300,000 行。
构建 Ethrex 的 LambdaClass 团队曾在密码学、分布式系统、编程语言设计和高频交易领域工作过,他们的背景影响了整个项目中可见的工程选择。
许多已建立的区块链客户端随着时间的推移会积累复杂性。 这种情况自然会发生:遗留功能需要为现有用户提供支持,雄心勃勃的路线图会增加抽象层,而交付的压力可能会导致技术债务无法解决。 其结果通常是难以维护、审计和推理的系统。
Ethrex 采取了不同的路径。 该理念简单地说:“保持简单和最小化。”
这不仅仅是为了极简主义而极简主义; 有切实的理由来关心代码大小和复杂性:
安全性。 更少的代码行意味着更小的攻击面。 安全审计员可以更彻底地审查代码库。 当隐藏的代码较少时,漏洞更容易被发现。
可维护性。 简单的代码更容易理解、修改和调试。 新的贡献者可以更快地提高工作效率。 团队可以迭代而无需对抗累积的复杂性。
性能。 当代码库足够小,可以装在你的脑海中时,查找和修复瓶颈就会变得很简单。 无需追踪抽象层来理解时间花在哪里。
可审计性。 对于在受监管的环境或高风险应用中部署 rollups 的团队来说,能够验证代码的作用非常重要。 6 万行代码的代码库是可审计的。 具有复杂继承层次结构的 30 万行代码库完全是另一项挑战。
ethrex 团队每天跟踪代码大小,并设有严格的限制,如果超出限制则会触发审查。 他们会主动重构以删除死代码。 该代码库仅包含 12 个 traits(被认为过多;正在积极减少)和 4 个宏(3 个用于测试,1 个用于指标)。
这种规范延伸到依赖关系管理。 与引入可能带来自身复杂性的外部库相比,垂直集成是更可取的。 仅支持合并后的以太坊分叉; 故意删除遗留功能以避免维护不再有用的代码。
最终的代码库中,大多数开发人员都可以理解整个系统。 没有只有一个人理解的“闹鬼森林”或“此处有龙”区域。
ethrex L2 作为 ZK-rollup 运行,这意味着所有执行都在链下进行,而以太坊 L1 充当验证和数据可用性层。 以下是各个部分如何组合在一起。
Ethrex L2 架构
用户将交易提交到 L2 网络。 Sequencer(排序器) 收集这些交易并生成 L2 区块。 区块被组织成批次以提高效率,因为将每个区块单独发布到 L1 的成本将非常高昂。
当一个批次准备好时,排序器会将其提交到 L1。 此提交包括(除其他数据外):
此时,该批次已“提交”但尚未“验证”。 L2 状态已发布,但没有证据表明它的计算是正确的。
然后,Prover(证明者) 生成批次执行的零知识证明。 此证明证明:给定先前的状态和批次中的交易,根据 EVM 规则,新的状态根是正确的。
一旦生成证明,就会将其提交到 L1 进行验证。 OnChainProposer 合约检查该证明,如果有效,则该批次将变为“已验证”。 此时,L2 状态继承了以太坊的安全性:任何人都可以验证 L1 上的证明,并确认状态转换是正确的。
Block Producer(区块生产者)。 从 mempool 创建 L2 区块,根据 gas 限制和排序规则将交易组合成区块。
L1 Watcher: 监视以太坊 L1 上来自桥合约的存款事件。 当用户在 L1 上存入资产时,watcher 会获取这些事件并在 L2 上创建相应的存款交易。
L1 Committer: 处理将批次提交发布到 L1,管理 gas 估算、nonce 处理和交易重试。
Proof Coordinator: 充当管理与 provers 通信的服务器。 它确定需要证明哪些批次,提供必要的输入数据,并接收已完成的证明。
L1 Proof Sender: 将已验证的证明提交到 L1,管理与 OnChainProposer 合约的交互。
CommonBridge (L1):处理 L1 和 L2 之间的存款和提款。 用户调用 deposit() 将资产转移到 L2,并使用 Merkle 证明调用 claimWithdrawal() 以提款回到 L1。
OnChainProposer (L1):管理批次生命周期。 Sequencers 调用 commitBatch() 以发布新批次,并调用 verifyBatch() 以提交证明。 该合约跟踪哪些批次已提交和验证。
CommonBridgeL2 (L2):桥的 L2 端。 处理提款启动并处理存款铸币。
交易数据使用 EIP-4844 blobs(以太坊的专用 L2 数据存储机制)发布。 每个 Blob 大约 128KB,并且比 calldata 便宜得多。
Ethrex 发布完整的 RLP 编码区块,而不是状态差异。 这提供了完整的交易可见性,这对于抗审查以及允许任何人独立重建 L2 状态非常重要。
ethrex 的一个显着特点是原生支持多个证明后端:
为什么多重证明支持很重要?
这也反映了一个理念选择:底层密码学应该由专门从事这项工作的团队构建(Starkware 的 Stwo、Succinct 的 SP1、RISC Zero 等)。 Ethrex 的工作是插入他们的工作,而不是重新发明它。
这种解耦在数字中显示出来:整个 l2/prover 目录大约有 1,300 行代码。 在其他项目中,与 ZK 相关的代码通常匹配或超过非 ZK 代码库的大小。
Ethrex 提供三种部署模式,每种模式都有不同的权衡。 选择取决于你对去中心化、成本和运营复杂性的要求。
最简单的部署模型。 单个运营方控制排序器,生成区块并将批次提交到 L1。 它是如何运作的?
权衡:
与 vanilla L2 类似,但交易数据未发布到 L1。 只有状态提交上链。
权衡:
去中心化排序,其中以太坊 L1 验证者参与区块生产。
权衡:
Based Rollup 的实现正在与即将推出的名为 Rogue 的无需许可 L2 合作开发。 这为基于排序工作提供了真实的部署目标。
基于排序值得更多解释,因为它代表了一种从根本上不同的 rollup 架构方法。
在当今大多数 rollups 中,中心化排序器决定交易排序。 这会创建一个单点故障和潜在的审查。 排序器运营商拥有很大的权力:他们在任何人之前看到交易,可以为了自己的利益重新排序(MEV 提取),并且可以选择包含哪些交易。
Based Rollups 颠覆了这个模型。 以太坊 L1 验证者参与 L2 区块生产,而不是使用专门的排序器。 “based” 名称指的是使用以太坊的基础层进行排序。
Ethrex 的基于排序方法:
基于功能的开发正在通过以下里程碑进行:
在评估任何技术时,诚实地对待能力和局限性非常重要。 一方面,Ethrex L2 提供:
另一方面,如前所述,Based Rollup 的支持正在进行中,但功能可用于测试。 与其他堆栈相比,工具、文档和社区资源的生态系统较小。
Aligned Layer 选择 ethrex 作为其 Rollup-as-a-Service 平台的基础。 他们的理由是性能、极简主义和与Based Rollup 兼容的架构与他们的需求一致。 该集成支持使用 Aligned 的证明验证基础设施一键部署 rollup。
Rogue 是一个即将推出的基于 ethrex 构建的无需许可的基于 L2。 它既充当基于排序功能的生产部署和开发驱动因素。
金融机构表示对用于私有 L2 部署的 ethrex 感兴趣。 审计较小的代码库的能力和部署选项的灵活性符合企业的需求。
最后,与以太坊基础设施的集成继续推进。 Ethrex 已被添加到以太坊的官方 Hive 测试框架和用于启动测试网络的 Kurtosis 包中。
LambdaClass 以特定的 信念 接近加密技术。 开源是必要的,而不是可选的,因为去中心化需要透明度。 公开构建、帮助其他人加入以及创建比单个项目更大的运动是加密技术实现其目标的实际必需品。
这项工作必须首先将工程放在首位,以此表达对构建技术卓越系统的更广泛承诺。 我们为我们在创纪录的时间内取得的成就感到非常自豪。
Ethrex 代表了对在趋向于复杂性的领域中保持简单的赌注。 我们鼓励重视可审计代码库、部署灵活性以及从一开始就为基于排序而设计的架构的团队来了解一下。
代码是开放的。 文档位于 docs.ethrex.xyz。 该团队可以通过 Telegram 和 GitHub 联系。
- 原文链接: blog.lambdaclass.com/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!