Scroll 是一个等效于 EVM 的 zkRollup,用于扩展以太坊。从技术上讲,Scroll 是建立在两个主要部分之上的。核心部分是zkEVM,用于证明第 2 层 EVM 执行的正确性。一年多来,我们一直在与以太坊基金会的隐私和扩展探索小组一起公开构建它。但是要将 zkEVM 变成以太坊上的一个完整的 zkRollup,我们还需要围绕它构建一个完整的 L2 架构。
在这篇文章中,我们将概述 Scroll 的整体架构。更具体地说,我们将介绍由中心化排序节点和去中心化证明网络组成的 Scroll 的初始版本。我们致力于在未来分散测序节点集,并将在未来的文章中分享我们的设计。
一. Scroll的架构
当前架构由三个基础设施组件组成(参见图 1):
Scroll Node: 从用户交易构造 L2 块,将它们提交到以太坊基础层,并在 L1 和 L2 之间传递消息。 Roller Network:生成 zkEVM 有效性证明以证明交易被正确执行。 Rollup 和 Bridge Contracts:为 Scroll 交易提供数据可用性,验证 zkEVM 有效性证明,并允许用户在 Ethereum 和 Scroll 之间移动资产。
在下文中,我们将详细介绍这些组件中的每一个的作用。
二. Scroll Node
Scroll Node 是应用程序和用户与 Scroll 交互的主要方式。它由三个模块组成,Sequencer、Coordinator 和 Relayer。
Sequencer提供 JSON-RPC 接口并接受 L2 事务。每隔几秒钟,它就会从 L2 内存池中检索一批交易并执行它们以生成新的 L2 块和新的状态根。我们的定序器实现基于 Go-Ethereum (Geth),它是最流行的以太坊节点实现之一。通过分叉Geth,我们可以实现最佳兼容性并继承经受住时间考验的安全性。
一旦生成了一个新的块,Coordinator 就会收到通知,并从排序器接收这个块的执行跟踪。然后它将执行跟踪分派到从滚筒池中随机选择的滚筒以生成证明。
Relayer监视部署在以太坊和 Scroll 上的桥接和汇总合约。它有两个主要职责。首先,它监控汇总合约以跟踪 L2 块的状态,包括它们的数据可用性和有效性证明。其次,它监视部署在以太坊和 Scroll 上的桥接合约的存款和取款事件,并将消息从一侧中继到另一侧。
三. Scroll Network
Rollers充当网络中的证明者,负责为 zkRollup 生成有效性证明。Rollers 预计将利用 GPU、FPGA 和 ASIC 等加速器来减少验证时间和验证成本。图 2 显示了 Roller 如何为每个块生成有效性证明。该过程包括以下步骤:
Roller 首先将从Coordinator接收到的执行跟踪转换为循环见证。 它为每个zkEVM电路生成证明。 最后,它使用证明聚合将来自多个 zkEVM 电路的证明组合成单个块证明。
四.Rollup 和 Bridge 合约
Scroll 通过Rollup和Bridge智能合约连接到以太坊的基础层。这些共同确保了 L2 交易的数据可用性,并允许用户在 L1 和 L2 之间传递资产和消息。
Rollup 合约从Sequencer 接收 L2 状态根和块。它将状态根存储在以太坊状态中,并将 L2 块数据存储为以太坊调用数据。这为 Scroll 块提供了数据可用性,并利用 Ethereum 的安全性来确保包括 Scroll Relayer 在内的索引器可以重建 L2 块。一旦确定 L2 块有效性的块证明已由 Rollup 合约验证,则相应的块被视为在 Scroll 上完成。
部署在以太坊和 Scroll 上的Bridge 合约允许用户在 L1 和 L2 之间传递任意消息。在此消息传递协议之上,我们还构建了一个无需信任的桥接协议,以允许用户在两个方向上桥接 ERC-20 资产。要从以太坊向 Scroll 发送消息或资金,用户需要调用sendMessageBridge 合约上的交易。Relayer 将在 L1 上索引此交易并将其发送到 Sequencer 以包含在 L2 块中。将消息从 Scroll 发送回以太坊使用 L2 Bridge 合约上的类似过程。
五. Scroll 的 zkRollup 是如何工作的?
将这三个架构部分放在一起,我们现在可以解释 Scroll 的 zkRollup 的工作流程,总结在下面的图 3 中。
Scroll 中的 L2 块被生成,提交到基础层 Ethereum,并按以下步骤顺序完成:
- Sequencer 生成一系列块。对于第i个块,Sequencer 生成执行跟踪T并将其发送给 Coordinator。同时,它还将交易数据D作为 calldata 提交给以太坊上的 Rollup 合约,以获取数据可用性,并将生成的状态根和对交易数据的承诺作为状态提交给 Rollup 合约。
- Coordinator 随机选择一个 Roller 为每个区块跟踪生成有效性证明。为了加快证明生成过程,可以在不同的 Rollers 上并行生成不同块的证明。
- 在为第i个块生成块证明P后,Roller 将其发送回 Coordinator。每k个块,Coordinator 将聚合任务分派给另一个 Roller,以将k个块证明聚合成单个聚合证明A。
- 最后,Coordinator 将聚合证明A提交给 Rollup 合约,通过根据之前提交给 Rollup 合约的状态根和交易数据承诺验证聚合证明,最终确定 L2 块i+1到i+k。
图 3 说明了滚动块将在 L1 上以多步骤过程完成。每个 L2 块将通过以下三个阶段进行,直到最终确定。
- Precommitted表示一个区块已经被一个 Sequencer 提议并发送给 Rollers。虽然 Precommitted 区块还不是 Scroll L2 链的规范部分,因为它们尚未发布在以太坊基础层上,但信任 Sequencer 的用户可以选择对其采取预期行动。
- Committed表示该区块的交易数据已经发布在以太坊的 rollup 合约上。这确保了块数据可用,但不能证明它已经以有效的方式执行。
- Finalized表明此区块中交易的正确执行已通过验证以太坊链上的有效性证明得到证明。最终区块被认为是 Scroll L2 链的规范部分。
将所有这些放在一起,Scroll 能够在 L2 上执行本机 EVM 字节码,同时从基础层以太坊继承强大的安全保证。在本系列的下一篇文章中,我们将解释开发人员在 Scroll 上部署 dapp 的工作流程以及用户如何与之交互。