Skip to main content

Scroll整体架构和主要流程

info

官方文档:https://docs.scroll.io/zh/technology/

Scroll主要有两个功能:跨链桥和rollup

  • 跨链桥:用于以太坊和Scroll之间发送消息和资产,主要负责L1和L2进行通信,可以在L1上调用L2的合约,也可以在L2上调用L1的合约。

  • rollup: 用于保证L2上的数据与L1上的数据拥有一样安全性,保证L2数据的可用性(Data Avaliability)和验证有效性证明(Proof Verification)

采用zkRollup实现以太坊扩容的优势:

  • 以单笔交易代替了很多笔交易

  • 增加了交易吞吐量

  • 节约了手续费

  • 降低了延迟等待

Scroll zkEVM与以太坊主网EVM兼容,可将以太坊主网的智能合约部署在Scroll zkEVM中,可共用以太坊现有的开发组件和套件。

整体架构

image-20240402101659381

如上图所示,Scroll 链由三层组成:

  • 结算层(Settlement Layer): BridgeContract 主要用于用户和去中心化应用程序在以太坊和Scroll之间发送消息和资产。RollupContract主要是用于提供数据可用性和验证有效性证明。我们使用以太坊作为结算层,并将跨链桥和Rollup合约部署到以太坊上。
  • 排序层(Sequencing Layer): 包含一个Execution Node以及一个Rollup Node,Execution Node用于执行提交到 Scroll 排序器的交易和提交给 L1 跨链桥合约的交易并生成 L2 区块,Rollup Node用于批处理交易,将交易数据和区块信息发布到以太坊以获得数据可用性,并将有效性证明提交给以太坊以进行最终确认。
  • 证明层(Proving Layer): 由一个证明器池组成,这些证明器负责生成验证 L2 交易正确性的 zkEVM 有效性证明,以及一个协调器,将证明任务分配给证明器并将证明中继到Rollup节点以在以太坊上最终确认。

主要流程

image-20240402102548724

Scroll主要流程分为三个阶段:

1)交易执行 (上图步骤1.a、1.b、1.c、2、3a、3b)

2)批处理和数据承诺(上图步骤4、5、6)

2)证明生成和最终确认(上图步骤7a、7b、7c、8a、8b、9a、9b)

L2的交易有两个来源:

1)L2通过订阅L1跨链桥合约的交易

2)直接发送到L2的交易

Execution Node

L2的排序器包含三个模块:Sync service、Mempool、Executor

Sync Service(同步服务):L2通过订阅提交到L1跨链桥合约中的交易,一旦检测到,L2同步服务将对应的生成一个L1MessageTx交易(L2链上根据EIP-2718定义的新的交易类型),并将其添加到本地L1交易队列。

MemoryPool(内存池):直接提交到L2排序器的交易将会被放在MemoryPool中。

Executor(执行器):从L1交易队列和L2内存池中提取交易,执行交易并构建新的L2区块。

Rollup Node

Roll节点包含三个模块:Relayer、Chunk Proposer、Batch Proposer

Relayer(中继器): 提交承诺交易(Data Avaliability)并在rollup合约中最终确认(Proof Verification)。

Chunk Proposer(块提议者)Batch Proposer(批次提议者)会按照下面的规则提议新块和新批次:

image-20240402104955479

​ Rollup节点收集新的L2区块并将其打包成块(chunks)和批次(Batches)。一组排序好的交易会被打包成一个块;一系列相邻的区块将会被分组进入一个块(chunk)中(chunk是生成zkEVm电路证明的基本单元);一系列相邻的chunk被分组到一个批次(batch)中,批次是L1上数据承诺(Data Avaliability)和证明验证(Proof Verification)的基础单元,批次证明是从批次中区块证明的聚合证明。

一旦chunk被创建,就会将chunk对应的task发送的zkevm证明器,生成其证明。

阶段1:交易执行

  1. 用户将交易提交到L1跨链桥合约或者L2的Execution Node,提交到L2的交易将会被放入到Execution Node的Memory Pool中。(上图步骤1a、1b)
  2. L2 Execution Node中的sync service从跨链桥合约中提取最新L1交易,并放入到本地的消息队列。(上图步骤2)
  3. L2 Execution Node的Executor从本地的L1消息队列和Memory pool中获取交易,并构建新的L2区块。(上图步骤3a、3b)

阶段2:批处理和数据承诺

  1. Rollup Node监听Execution Node的产生的最新区块。(上图步骤4)
  2. 如果满足条件,Rollup Nod将提议一个新的chunk或者batch并写入数据库,否则Rollup Node会等待更多的block或者chunk来创建新的batch(上图步骤5)。
  3. 创建了新的batch之后,Rollup Relayer将收集此batch中的transaction数据,并将承诺交易提交到Rollup合约来实现数据可用性(Data Avaliability)。(上图步骤6)。

阶段3:证明生成和最终确认

  1. Coordinator(协调器)会轮询数据库,一旦查询到新的chunk或者batch。将会执行以下操作:(上图步骤7a、7b、7c)
  • 在新的chunk上,Coordinator将会从L2 Execution Node中查询当前chunk中所有block的执行轨迹(execution traces),然后将证明任务发送到随机选择的zkEVM证明器(zkEVM Prover)。
  • 在新batch上,Coordinator将会从数据库中收集当前batch中所有chunk的chunk证明,并将batch证明任务分配给随机选择的聚合证明器。
  1. 当Coordinator从zkEvm Prover获取到chunk或者batch的证明时,Coordinator会将证明写入到数据库。(上图步骤8a、8b)
  2. 一旦Rollup Node中的Ralyer从数据库中轮训得到新的batch的证明,它就会想Rollup合约提交最终确认交易来验证证明(Proof Verification)。(上图步骤9a、9b)

交易的生命周期

Scroll中的交易的生命周期包含三个阶段:

  1. 已确认(Confirmed): 用户向L1跨链网桥合约或者L2 Execution Node提交交易,交易执行并包含在L2区块中后变为Confirmed
  2. 已提交(Committed): 交易被包含在batch中,并且包含此batch数据的承诺交易(commit transaction)已经被提交到L1,在L1区块中确认承诺事务后,此batch中的交易变为Committed
  3. 最终确认(Finalized): 该batch的证明生成并在L1上得到验证,在最终确认交易(finalize transaction)在L1上最终确认后,该batch中的交易状态变为Finalized

问题:

Sequencing Layer和Proving Layer是否是去中心化的,是否需要去中心化?https://foresightnews.pro/article/detail/35169

有无激励机制?