本文提出了一种协议,允许L2提议者选择性地将同一插槽中发出的L1消息直接注入到L2中,无需等待状态根导入。通过将此协议与L2→L1提款机制相结合,用户可以执行可组合的L1<>L2捆绑,例如从L1存入ETH,在L2上将其兑换为USDC,然后提取回L1,所有这些都在单个插槽内完成。
由 Lin Oshitani, Conor McMenamin, Anshu Jalan, 和 Ahmad Bitar 共同撰写,他们都来自 Nethermind。感谢 Brecht Davos, Jeff Walsh, 和 Daniel Wang (来自 Taiko) 的反馈。反馈不一定代表认可。
Rollups 可以将 L1 状态根导入到 L2,以方便两层之间的消息传递,例如用户存款和跨链合约调用。然而,由于 EVM 无法访问当前区块的状态根,rollups 只能拉取过去区块的状态根。这个限制使得 rollups 无法仅使用状态根在同一插槽内处理 L1→L2 消息。
为了克服这个限制,本文介绍了一种协议,该协议使得 L2 提议者可以选择性地将同一插槽中发出的 L1 消息直接注入到 L2 中,从而绕过了等待状态根导入的需求。通过将此协议与我们在之前的帖子中讨论的 L2→L1 提款机制相结合,用户可以执行可组合的 L1<>L2 捆绑操作,例如从 L1 存入 ETH,在 L2 上将其兑换为 USDC,然后提款回 L1——所有这些都在一个插槽内完成。
我们使用 Taiko 协议中的术语,本研究基于该协议。
以下是该协议的高级图示:
流程如下解释,粗体文本高亮显示了本提案为支持同槽消息传递而新引入的组件。非粗体文本遵循当前 Taiko 协议中的实现。
请注意,消息服务合约不提供原生的重放检测,它将此责任委托给消费消息的应用程序。
接下来,我们将探讨此协议的关键特性,这些特性塑造了其设计决策。
该协议的一个重要特性是,L2 提议者可以选择将哪些同槽 L1→L2 消息导入到他们的 L2 区块中。这确保了:
此外,请注意,如果指定的同槽消息未在 L1 中发出,则批量提议交易将回滚(请参阅协议描述中的 (C))。这使 L2 提议者可以无信任地将其 L2 批量条件化于相关的同槽消息。
假设 L1 用户想要从 L1 存入 ETH,在 L2 上将其兑换为 USDC,然后提款回 L1——所有这些都在同一插槽内完成。通过将此提案与我们在 快速(和慢速)L2→L1 提款 中引入的同槽 L2→L1 提款机制相结合,可以实现此目的。具体来说,L2 提议者可以提交一个包含以下三个交易的 L1 捆绑包:
重要的是要注意,在上述 L1→L2→L1 场景中,L2 提议者_不必_是 L1 构建者。也就是说,不需要共享的排序器/构建器。重要的是捆绑包以原子方式执行——捆绑包中的所有交易都成功,或者根本不包含捆绑包。这种原子性可以通过诸如 eth_sendBundle
之类的构建者 RPC 或通过 EIP-7702(一旦实施)来实现,确保 L1→L2→L1 捆绑包将在同一插槽内以原子方式执行。换句话说,L2 提议者不需要准确知道 L2 批量执行的 L1 状态。相反,L2 提议者只需要知道“足够”的 L1 状态——具体来说,是导入的同槽消息——来执行 L2 批量。
这意味着不一定需要 rollup 在 L1 和 L2 之间具有共享排序器的意义上是“基于”的,这是Based Rollup 的 价值主张之一。但是,依靠同槽 L1 消息进行 L2 执行会在 L1 和 L2 之间建立紧密的耦合。因此,L2 需要在重组事件期间与 L1 “一起重组”。实际上,只有Based Rollup 才会接受这种重组。
当前协议没有引入激励 L2 提议者包含和使用同槽消息的机制。这些激励可以在 L2 执行端实现。我们可以引入诸如条件化于特定 L2 区块中包含的 L2 交易或具有“衰减”优先费的 L2 交易等功能。请注意,这样的功能对于解决预确认的 公平交换问题 也很重要,因为预确认和同槽消息传递都旨在激励提议者尽早包含交易。
该协议的一个限制是 L2 只能读取同一插槽中消息传递服务合约的 L1 状态。我们能否获得任意 L1 状态的读取权限,而不仅仅是消息传递服务合约状态,以实现 L1 和 L2 之间更无缝的可组合性吗?
Gwyneth 是 Taiko 团队正在开发的一个令人兴奋的新协议,旨在实现从 L2 读取此类任意的同槽 L1 状态。正在考虑的一种有趣的方法是引入一个新的“内省预编译”(EIP-7814),该预编译将当前交易 trie 和操作码计数器暴露给 EVM。有了这些信息,批量收件箱合约可以获取交易 trie 和操作码计数器,并将它们传递给 L2 执行。这将使 L2 能够模拟整个 L1 执行,直到批量提议,并计算批量提议的精确操作码计数器的插槽中间的 L1 状态根。
在此处阅读有关 Gwyneth 设计的更多信息 here。
每个同槽消息导入的 L1 gas 的粗略估计如下:
因此,512 + 2100 = 2612 gas,加上在消息之间共享的调用消息服务的 2600 gas 成本。此外,如果我们允许 L2 提议者释放他们为同槽包含而消费的消息的 EVM 插槽,他们可以收到 gas 退款,以补偿额外的 gas 成本。
- 原文链接: ethresear.ch/t/same-slot...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!