# Scroll 的技术与架构设计

By [DAOVoice](https://paragraph.com/@daovoice) · 2022-11-16

---

Scroll 近期在一级市场的表现非常好，所以我们今天来深入了解一下 Scroll 的技术与架构设计。

Scroll 是一个 EVM 等效的 zkRollup 以太坊扩容方案，核心的模块是 zkEVM, 用于证明 EVM 在 Layer2 中执行的正确性。目前已经开发了一年的时间，并与以太坊基金会的隐私小组进行了深入的合作。

为了使得 zkEVM 变成一个完整的 zkRollup,Scroll 围绕 zkEVM 构建了一个完整的 Layer2 架构。

目前的架构包含了中心化的排序节点与去中心化的证明网络，但未来 Scroll 将会把排序节点也去中心化，使得整个网络更加健壮。

Scroll 的架构
==========

目前的 Scroll 架构包含三个主要的组件：

*   **Scroll 节点**：从用户交易中构建 L2 的区块，提交到以太坊主网，并在 L1 和 L2 之间传递信息。
    
*   **Roller 网络**：生成 zkEVM 的证明，确保交易被正确执行。
    
*   **Rollup 和桥合约**：为 Scroll 交易提供数据可用性，验证 zkEVM 证明，允许用户在以太坊网络和 Scroll 之间转移资产。
    

这些组件的角色关系我们可以从下图中得出：

![](https://storage.googleapis.com/papyrus_images/c4203c83156b90842094a4c939827ab7cb7fb7b981cf01d1b33970303eaa3e01.png)

Scroll 节点
=========

Scroll 节点是应用和用户与 Scroll 网络交互的主要方式，Scroll 节点包含了三个模块：

**Sequencer（序列机）**

Sequencer 提供了一个 JSON-RPC 接口从而获得 Layer2 上的转账信息。每隔几秒，Sequencer 会从 L2 的内存池中获得一系列转账记录，执行这些转账并生成新的 L2 区块与新的状态根。

Scroll 上的 Sequencer 是**基于经过时间验证的 Geth（Go-ethereum）开发**的，目的是为了**保证兼容性和安全性**。

**Coordinator（协调器）**

当新的 L2 区块被生成之后，Coordinator 会从 Sequencer 中获得交易执行记录。然后 Coordinator 将执行记录分派到从 roller 池中随机选择的 roller 以生成证明。

**Relayer（中继器）**

Relayer 会监视部署在以太坊和 Scroll 上的 Rollup 和桥合约，这主要有两个作用。

首先是监控 Rollup 合约以跟踪 L2 块的状态，包括数据可用性和有效性证明。

其次，Relayer 监视部署在以太坊和 Scroll 上的桥合约的存取款事件，并将消息在两条链之间中继。

Roller 网络
=========

Rollers 在网络中充当证明者，负责为 zkRollup 生成有效性证明。\*\*Rollers 有望利用 GPU、FPGA 和 ASIC 等加速器来减少验证时间和验证成本。\*\*下图显示了 Roller 如何为每个块生成有效性证明：

![](https://storage.googleapis.com/papyrus_images/a8e07fc4ca786dcb4b1f1a441981eea2fa9e094083a9490326c1efb72fa68507.png)

*   Roller 首先将从 Coordinator 接收到的执行序列转换为 circuit witnesses。
    
*   其次，Roller 为每个 zkEVM 电路生成证明。
    
*   最后，Roller 使用证明聚合方法将来自多个 zkEVM 电路的证明组合成一个块证明。
    

Rollup 和桥合约
-----------

Scroll 通过 Rollup 和桥合约来连接以太坊主网和 Scoll 网络，保证 L2 交易的数据可用性，并使用户可以在 L1 和 L2 之间转移资产。

Rollup 合约从 Sequencer 中获取 L2 的状态根作为 calldata。这为 Scroll 块提供了数据可用性，并利用以太坊的安全性来确保包括 Scroll Relayer 在内的索引可以重建 L2 块。**一旦建立 L2 区块有效性的区块证明已被 Rollup 合约验证，相应的区块将被视为在 Scroll 上最终确定。**

部署在以太坊和 Scroll 上的 Bridge 合约允许用户在 L1 和 L2 之间传递任意消息。在这个消息传递协议之上，Scroll 还构建了一个**去信任桥接协议**，**允许用户双向桥接 ERC-20 资产**。

要从以太坊向 Scroll 发送消息或资金，用户需要在 Bridge 合约上调用 sendMessage。

Relayer 将在 L1 上索引，并将其发送到 Sequencer 以包含在 L2 块中。从 Scroll 发送回以太坊的消息在 L2 Bridge 合约上使用了类似的过程。

Scroll 的 zkRollup 是如何工作的
========================

将上述的三个模块放在一起，我们就可以知道 Scroll zkRollup 的整个工作流程了，如下图所示：

![](https://storage.googleapis.com/papyrus_images/e28dcd05a461a5c2a43c3513ebe865b2aa59c22031ccfecbc010cf287f1bd223.png)

Scroll 中的 L2 区块生成之后，将提交给以太坊主网，具体的过程如下：

1.  Sequencer 生成了一系列的块，对于第 i 个块，Sequencer 执行追踪 T，并将其发送给 Coordinator。同时，Sequencer 将交易数据 D 作为 calldata 提交给以太坊上的 Rollup 合约以获得数据可用性，再将由此产生的状态根和交易数据作为状态提交给 Rollup 合约。
    
2.  Coordinator 随机选择一个 Roller 为每个块生成有效性证明。为了加快证明的生成过程，可以在不同的 Roller 上并行生成不同的区块证明。
    
3.  在为第 i 个块生成证明 P 后，Roller 将其发送回 Coordinator。每隔 k 个块，Coordinator 向另一个 Roller 派发一个聚合任务，将 k 个块的证明聚合成一个证明 A。
    
4.  最后，Coordinator 将聚合证明 A 提交给 Rollup 合约，通过对照先前提交给 Rollup 合约的状态根和交易数据承诺来验证聚合证明，最后确定 L2 上的 \[i+1,i+k\] 之间的块。
    

经过这样的过程 Scroll 上的区块会被最终确定下来，每个 L2 的区块在这一过程中会经历三个过程，其分别为：

Precommitted（预确认）：表示一个区块已经被 Sequencer 提交并发送给 Rollers。

Committed（确认）：表示区块的交易数据已经被发布到了以太坊网络的 Rollup 合约上。

Finalized（完成）：表示此区块的交易已经被正确地执行。

综上所述，Scroll 能够在 L2 上执行 EVM 字节码，同时从以太坊主网继承强大的安全性保证。这也是 Scroll 这种 EVM 等效和其他 EVM 兼容方案的最大不同点。

[https://twitter.com/daovoiceeth](https://twitter.com/daovoiceeth)

![](https://storage.googleapis.com/papyrus_images/42d8748f7fc4a2cb6c9d31228b712686b7db8930bdafb805650a62e90defbfed.png)

---

*Originally published on [DAOVoice](https://paragraph.com/@daovoice/scroll)*
