bot.gif
close
正在加载
以太坊研究员:原生 rollups——来自 L1 执行的超能力
互联网 · 2025-01-23 11:31
1426
摘要
这篇文章提出了一种方法,让 EVM 等效的汇总摆脱安全委员会和其他攻击媒介,解锁完整的以太坊 L1 安全性 。
币界网报道:

作者:以太坊研究员 Justin Drake,ethresearch;编译:陶朱,

这篇文章的功劳要归功于更广泛的以太坊研发社区。关键贡献源自 2017 年,多年来设计有了重大的增量解锁。最近的 zkVM 工程突破引发了彻底的设计空间探索。本文只是尽最大努力尝试为一个可能终于到来的大创意拼凑出一个连贯的设计。

摘要

我们提出了一种优雅而强大的 EXECUTE 预编译,将原生 L1 EVM 执行引擎暴露给应用层。原生执行汇总(简称“原生汇总”)是一种使用 EXECUTE 来验证批量用户交易的 EVM 状态转换的汇总。可以将原生汇总视为“可编程执行分片”,将预编译包装在派生函数中以处理 EVM 外的系统逻辑,例如排序、桥接、强制包含、治理。

由于 EXECUTE 预编译由验证器直接执行,因此它享有 (zk)EL 客户端多样性并提供 EVM 等效性,该等效性在构造上无错误,并且与通过 L1 硬分叉进行的 EVM 升级向前兼容。对于希望完全继承以太坊安全性的 EVM 等效汇总,像 EXECUTE 预编译这样的 EVM 自省形式是必要的。我们将完全继承以太坊安全性的汇总称为“无需信任的汇总”。

EXECUTE 预编译大大简化了 EVM 等效汇总的开发,因为无需复杂的基础设施(例如防欺诈游戏、SNARK 电路、安全委员会)即可进行 EVM 模拟和维护。使用 EXECUTE,只需几行 Solidity 代码,使用简单的派生函数即可部署最小的原生汇总和基于汇总,从而无需对排序、强制包含或治理进行特殊处理。

最重要的是,原生汇总可以享受实时结算,而无需担心实时证明,从而大大简化了同步可组合性。

本文分为两部分,首先介绍拟议的预编译,最后讨论原生汇总。

第 1 部分 — EXECUTE 预编译

结构

EXECUTE 预编译接受输入 pre_state_root、post_state_root、trace 和 gas_used。当且仅当满足以下条件时,它才返回 true:

有一种 EIP-1559 式机制,用于计量和定价 L1 区块中所有 EXECUTE 调用所消耗的累计 gas。具体来说,有一个累计 gas 限制 EXECUTE_CUMULATIVE_GAS_LIMIT,以及一个累计 gas 目标 EXECUTE_CUMULATIVE_GAS_TARGET。(当 L1 EVM 可由验证者无状态执行时,累计限制和目标可以与 L1 EIP-1559 机制合并。)

调用预编译需要花费固定数量的 L1 gas、EXECUTE_GAS_COST,加上 gas_used * gas_price,其中 gas_price(以 ETH/gas 计价)由 EIP-1559 式机制设置。即使预编译返回 false,也会提取全额预付款。

跟踪必须指向来自调用数据、blob、状态或内存的可用以太坊数据。

重新执行

如果 EXECUTE_CUMULATIVE_GAS_LIMIT 足够小,验证器可以简单地重新执行跟踪以强制执行 EXECUTE 调用的正确性。基于重新执行的预编译的初始部署可以作为垫脚石,类似于原始 danksharding 的简单重新下载 blob 到完整 danksharding。请注意,简单的重新执行不会给验证器带来状态增长或带宽开销,并且任何执行开销都可以在 CPU 核心之间并行化。

验证器必须持有跟踪的明确副本以进行重新执行,从而防止使用通过 DAS 采样(而不是下载)的 blob 数据的指针。请注意,乐观的本机汇总可能仍会以 blob 的形式发布汇总数据,仅在欺诈证明游戏中回退到调用数据。还要注意的是,乐观的原生汇总可以具有远远超过 EXECUTE_CUMULATIVE_GAS_LIMIT 的 gas 限制,因为 EXECUTE 预编译只需要在小型 EVM 段上调用一次即可解决欺诈证明挑战。

作为历史记录,2017 年 Vitalik 提出了类似的“EVM inside EVM”预编译 ,称为 EXECTX。

通过 SNARK 执行

要解锁较大的 EXECUTE_CUMULATIVE_GAS_LIMIT,自然会让验证者选择性地验证 SNARK 证明。从现在开始,我们假设一个时隙延迟执行,其中无效块(或无效交易)被视为无操作。(有关延迟执行的更多信息,请参阅此 ethresearch 帖子、此 EIP 和 Francesco 的此设计 。)一个时隙延迟执行会产生几秒钟(整个时隙)用于证明。它们还避免激励 MEV 驱动的证明竞赛,这将引入集中化向量。

请注意,即使 EXECUTE 由 SNARK 强制执行,也没有明确的证明系统或电路被纳入共识。(请注意,EXECUTE 预编译不会将任何明确的证明作为输入。)相反,每个质押操作员都可以自由选择他们最喜欢的 zkEL 验证器客户端,类似于今天主观选择 EL 客户端的方式。下一节“链下证明”将解释此设计决策的好处。

从现在开始,我们假设执行提议者在具有交替执行和共识时隙的证明者-提议者分离 (APS) 的背景下是成熟的。为了激励理性的执行提议者及时生成证明(在 1 个时隙内),我们要求证明者仅在执行块 n 的证明可用时才证明执行块 n+1。(我们建议在 p2p 层将块 n+1 与块 n 的 EXECUTE 证明捆绑在一起。)跳过证明的执行提议者可能会错过他们的时隙,导致错过费用和 MEV。我们进一步对错过的执行时隙施加固定惩罚,将其设置得足够高(例如 1 ETH)以始终超过证明的成本。

请注意,在 APS 的背景下,共识块的生成不会因错过的执行时隙而受阻。然而,及时生成证明对于轻客户端来说很重要,这样他们就可以在链端轻松读取状态,而无需无状态重新执行。为了确保及时为轻客户端生成证明,即使在下一个执行提议者错过其时隙的特殊情况下,我们也依赖于利他少数证明者假设。单个利他证明者足以在 1 个时隙内生成证明。为了避免不必要的冗余证明,大多数利他证明者可以等待待命,并且仅在 1 个时隙内没有证明到达时才启动,从而充当最多 2 个时隙延迟的故障安全措施。

请注意,EXECUTE_CUMULATIVE_GAS_LIMIT 需要设置得足够低,以使利他少数证明者假设可信(以及使执行提议不会不切实际地复杂化)。保守的策略可以是设置 EXECUTE_CUMULATIVE_GAS_LIMIT,以便笔记本电脑(例如高端 MacBook Pro)可以访问单时隙证明。更务实和积极的政策可能是瞄准一小部分 GPU,并且一旦它们充分商品化,最终可能会瞄准 SNARK ASIC 证明器。

链下证明

重申一下,我们建议不要将 zkEL EXECUTE 证明放在链上,而是在链下共享。不保存证明是一个好主意,由 Vitalik 首次提出,它有几个优点:

拥有链下证明确实会带来一些可控的复杂情况:

链下证明还会降低实时结算 L2 的效率:

RISC-V 原生执行

鉴于当今事实上向 RISC-V zkVM 的趋同,可能有机会将 RISC-V 状态转换本地暴露给 EVM(类似于 Arbitrum Stylus 环境中的 WASM)并保持 SNARK 友好性。

第 2 部分 — 原生 Rollup

命名

我们首先讨论原生 Rollup 的命名,以解决几个容易引起混淆的问题:

好处

Native Rollups 有几个好处,我们将在下面详细介绍:

相关资讯