原文作者 | Taiko Labs
编译| Odaily星球日报(@OdailyChina)
译者| 叮当(@XiaMiPP)

编者按:还记得当年分片(Sharding)的热闹吗?那时候它可是区块链界的“流量密码”,结果以太坊冷静一想,放弃了这个烫手山芋。如今,本地 Rollup 卷土重来,通过执行预编译合约(EXECUTE Precompile)和优化以太坊区块处理结构,不仅让 Rollup 更安全、更灵活,还顺手给以太坊L1来了个横向大扩容,为未来的实时证明开了条路。
以下为 Taiko 实验室发布的原文内容,由Odaily星球日报编译。由于本文的技术性较强,为保证文章的可读性,Odaily 进行了适当的删减,尽可能清晰易懂呈现。
引言
分片(Sharding)在 2017-2020 年间是一个热门话题。当时,Harmony、Zilliqa 和 Elrond 等不同团队在其区块链中实施了分片技术。这种技术本质上是将网络划分为多个较小的、并行运行的链(称为“分片”),这些分片可以同时处理交易,以此作为扩展分布式系统的一种直接方式。
分片也是以太坊 2.0 时代被社区认真讨论的话题。然而,以太坊最终决定不采用分片方案,主要基于以下四个挑战:
1. 思维模式的不同(Mindset Differentiations)
在这种分片模式下,协议本身会自上而下强制规定确切的分片数量。这些分片是按照预定义模板运行的单一链,缺乏可编程性,并且本质上只是 L1(第一层区块链)的多个相同副本。
2. 乐观安全性(Optimistic Security)
当时,为了保证分片的诚实性,需要使用乐观证明(Optimistic Proofs),而零知识(ZK)技术尚未成熟。这意味著必须在链上系统性地管理欺诈证明(Fraud-Proof)逻辑。
3. 复杂性(Complexity)
在 L1 层实现分片会显著增加协议的复杂性,特别是在管理快速的预确认(Preconfirmation)和较慢的最终确认(Final Confirmation)系统,以及协调不同安全级别的分片方面。
4. 共识过载(Overload Consensus)
在 L1 层追求更高的可扩展性可能会增加中心化风险。如果在基础层(Base Layer)实现分片,这种风险可能会影响整个协议,而不像现在那样仅限於单个 L2(第二层扩展方案)。
本地 Rollup(Native Rollups)本质上可以被视为分片的一种回归,但这次有所不同。我们已经吸取了教训,并且具备了更好的技术和经验。

什么是本地 Rollup?
需要记住,Rollup 由数据、排序(Sequencing)和执行(Execution)模块组成。本地 Rollup 直接使用以太坊自身的执行环境(Execution Environment)作为其执行模块。我们可以将其称为 L1 的可编程执行分片(Programmable Execution Shards)。
要理解如何将 L1 执行环境作为 Rollup 使用,可能会有些复杂。为了在 Rollup 中消费 L1 执行环境,我们需要能够在 EVM 内部执行另一个 EVM(EVM inside EVM)。因此,L1 需要能够感知本地 Rollup 在每个区块中的状态转换(State Transition)。要实现这一点,我们需要一个来提供支持。
EXECUTE 预编译合约
EXECUTE 预编译合约提供了一种机制,使得一个 EVM 上下文能够验证另一个 EVM 上下文的执行结果,同时保持相同的执行规则和状态转换逻辑。
预编译合约接受三个输入参数:
pre_state:执行前的 32 字节状态根(State Root)
post_state:执行后的 32 字节状态根
witness_trace:执行轨迹,包含交易和状态访问证明
预编译合约的核心是断言(Assertion):它会验证从 pre_state 开始执行 trace 是否能得到 post_state。如果状态转换函数有效,预编译合约会返回 true。
执行轨迹需要对所有验证者可用(以 blobs 或 calldata 形式),以便验证者可以重新执行计算并验证状态转换的正确性。值得注意的是,该预编译合约不会将证明(Proof)作为输入。这意味著协议本身不会强制执行任何特定的证明系统,而是通过 p2p 网络的 Gossip 频道传播不同类型的证明。
Gas 计费模型
以太坊的计算资源有限,因此 Gas 机制用于管理这些资源。EXECUTE 预编译合约实现了一个 Gas 计费模型来管理计算资源:
基础成本(Base Cost):预编译合约会收取固定的 Gas 费用 EXECUTE_GAS_COST,再加上执行轨迹使用的 Gas 乘以当前 Gas 价格。
累计 Gas 限制(Cumulative Gas Limit):类似于 EIP-1559 机制,管理和定价所有 EXECUTE 调用在 L1 区块中的总 Gas 消耗:
EXECUTE_CUMULATIVE_GAS_LIMIT:一个区块中所有 EXECUTE 调用的最大 Gas 限制。
EXECUTE_CUMULATIVE_GAS_TARGET:目标 Gas 使用量,以便进行高效定价。
这个模型类似于 blob 中的数据可用性(DA)定价机制。

需要记住,本地 Rollup 和 L1 的 SNARK 化(SNARKifying the L1)这两个概念经常被混淆在一起。SNARK 化 L1 是一种纵向扩展(Vertical Scaling)方法,通过 SNARK 化执行(如 zkEVM)和共识(如 Beam)来消除 Gas 限制,从而提升 L1 的性能。而本地 Rollup 则是横向扩展(Horizontal Scaling)L1,通过可编程方式创建任意数量的 EVM 副本,实现更高的可扩展性。
为什么本地 Rollup 更有优势?
1. 安全性
当前的 Rollup 设计需要安全委员会(Security Councils)来更新链,以应对潜在的漏洞。而本地 Rollup 依赖于以太坊的进行治理。运营商无需担心担心漏洞问题,因为以太坊社区会负责维护和修复。
2. 简化 L1 同步可组合性(Synchronous Composability)
基于 L1 的 Rollup 接近于实现同步可组合性,但要求 L1 和 L2 的区块由同一构建者(Builder)同时构建。本地 Rollup 可以直接通过 EXECUTE 预编译合约验证另一个本地 Rollup 的状态,而无需额外的信任假设。
3. 向前兼容性(Forward Compatibility)
随著 L1 EVM 进化,本地 Rollup 会自动继承所有改进,而不需要单独适配,实现与以太坊发展路线的长期兼容性。
初始实现方案:重新执行
在本地 Rollup 的背景下,重新执行(Re-execution) 被视为初始实现方案。重新执行指的是验证者直接执行交易轨迹(transaction trace),以验证本地 Rollup 的状态转换是否有效,而不是依赖 SNARK 证明。如果 EXECUTE_CUMULATIVE_GAS_LIMIT 维持在较小范围内,这种重新执行对于验证者来说仍然是可管理的。

优化执行方案:实时证明(Real-Time Proving)
在重新执行(Re-execution)模式下,验证者必须自行处理所有交易,其吞吐量受 EXECUTE_CUMULATIVE_GAS_LIMIT 参数的限制。而可以显著提高这一限制,因为验证者只需验证证明,而无需重新执行所有交易。
随著行业快速向实时证明发展,我们需要采取措施扩大本地 Rollup 的证明窗口。为了争取更多的证明时间,需要调整当前以太坊的区块处理结构。
如何延长证明窗口?
当前以太坊的区块处理流程
在现有的结构下,以下所有步骤必须在 12 秒内完成(每 4 秒一个阶段),才能进入下一个区块:
区块 N 提议交易
在验证/确认区块之前,必须完成:
执行所有交易
计算状态变更
计算状态根(stateRoot)
计算交易回执和日志(receipts & logs)
只有完成上述所有步骤后,区块才能被验证和确认。

按照目前的流程,如果要实现与 L1 的同步可组合性,证明必须在 4 秒内 完成。然而,目前 ZK 技术尚不成熟,还无法在 4 秒内 生成以太坊区块的证明,因此我们需要在证明流程上引入更大的灵活性。
为了给本地 Rollup 争取更多证明时间,我们需要调整以太坊当前的区块处理结构。例如:
延迟 state_root 计算:将 state_root 计算从关键路径中移除,使其在验证者空闲时间计算。
延迟执行(Delayed Execution):将区块验证与交易执行分离,优化共识效率,同时为证明生成提供更长时间。
常见问题(FAQ)
Taiko 将使用哪种类型的证明?
不会采用单一类型的证明。我们希望证明者(provers)和客户端(clients)都具有多样性。验证者可以根据自身选择主观决定使用哪种证明方式。
关于不同证明类型的多样性,请参阅 EthProofs。
谁来生成证明?
任何人都可以生成证明。即使只有一个证明者,链仍然可以正常运行。目前仍存在一个开放性问题:如何在协议层面激励证明者。
证明之间是否会达成共识?
不会。证明不会在链上进行共识,而是通过链下(off-chain)传播。网络中只需要达成共识,即某个地方存在有效的证明即可。
文章声明:以上内容(如有图片或视频亦包括在内)除非注明,否则均为谈天说币原创文章,转载或复制请以超链接形式并注明出处。