项目简介

Scroll 是2021年由华人创始团队推出的 基于zkEVM 的 以太坊ZKR扩容方案,不同于zkSync的语言级别兼容,Scroll实现了完全EVM等效,即字节码层级兼容,除了数据结构和状态树等部分,zkEVM看起来与以太坊完全一样,由此,现有的以太坊应用程序和工具可以实现无缝迁徙。

关键时间点

融资

  • 2022.7 Scroll 推出 pre-alpha 测试网
  • 2023.2 Scroll 改进 v2 桥和 ZK 架构,将 prover 内存需求从 870GB 降低到 275 GB
  • 2023.2 Scroll 推出 alpha 测试网

待推进

  • 引入 The Graph 支持
  • 推进账户抽象
  • 2022年 融资 3000 万美元
  • 2023年 融资5000万美元

核心价值

  • 完全EVM等效
    Vitalik将zkEVM类项目划分为5类,类型1—完全以太坊等效(字节码层级兼容,不改变以太坊的任何部分)、类型2—完全EVM等效(字节码层级兼容,仅改变数据结构和状态树等部分)、类型3—EVM等效(增加gas成本以适配难以zk证明的特定操作)、类型4—几乎等同于EVM(过渡态,直至转向前几类)、类型5—编程语言等效(支持Solidity、Vyper等编写的智能合约),显然,前2类更靠近以太坊生态,更适应以太坊的各种升级,而Scroll实现的完全EVM等效,正是做的此类工作。

  • 去中心化的验证网络
    Scroll提供去中心化的验证网络,任何用户只要有GPU机器就可以成为证明节点,而且随着节点的增多,算力将越大,成本将越低。

竞品

  • zkSync:对比Scroll,zkSync仅实现语言级别的等效。此外,zkSync团队控制了出块、打包和验证过程,存在一定的中心化问题
  • Polygon Hermez(Polygon zkEVM):与Scroll一样,Polygon Hermez提供了字节码层级的EVM等效,实际上Polygon zkEVM引入了一层zkASM(zero knowledge Assembly),字节码编译为zkASM之后再运行
  • Starknet:虽然Starknet仅仅提供语言级别的EVM兼容,但基于Cairo构造的新虚拟机非常灵活,能支持多需求的复杂应用。
  • Taiko:实现了完全以太坊等效的zkEVM

项目架构及原理

Scroll架构

如上图,Scroll架构包括3部分:

1)Scroll节点

  • Sequencer 负责 a) 接收用户交易,打包区块,提取区块执行记录(execution trace)并发送给 Coordinator;b) 向 Rollup合约提交区块信息、新的stateRoot作为callData;
    Sequencer直接复用了以太坊节点Geth的代码,保证交易在L2和L1上的执行方式完全一致。
  • Coordinator负责接收执行记录(witness),从 Roller Pool 中随机拉取 Roller产生zk证明,聚合zk证明;
  • Relayer 负责 a) 通过Bridge合约监听 L1 上存款、提款事件;b) 通过Rollup合约追踪 L2 上区块状态,包括数据可用性、zk证明等。

2)Roller网络:充当prover的角色,负责产生zk证明。任何用户只要拥有GPU机器都可以成为Roller,因此,Roller实际上构成了去中心化的验证网络,

3)合约

  • Bridge合约:用于L1-L2之间的资产转移。
  • Rollup合约:用于L2交易数据可用性,及证明验证。

 

Scroll工作流

L2区块产生,提交到L1,在L1上确认的流程为:

  1. Sequencer 接收L2用户交易,产生区块。对于区块i,Sequencer产生执行记录T,发送给Coordinator。期间,Sequencer将交易数据D、将更新后的stateRoot和交易承诺提交给Rollup合约作为calldata。
  2. Coordinator 从Roller Pool随机挑选一个Roller为执行记录产生合法性证明。为了加速证明产生过程,不同区块的合法性证明可以并行生成。
  3. 为区块i生成合法性证明P后,Roller将证明发回给Coordinator。每获取k个区块证明,Coordinator分配聚合任务给另一个Roller,将k个单独的证明聚合为单个证明A。
  4. 最后,Coordinator将聚合证明A提交给Rollup合约,Rollup合约基于前述calldata数据验证A的合法性,验证通过则L2上k个区块在L1完成确认。

 

核心技术实现

与EVM等效的zkEVM是Scroll的灵魂,在分析zkEVM的实现之前,我们先回顾下EVM执行智能合约的过程。

EVM架构

新版本的以太坊将 EVM 从节点代码中剥离出来,形成独立的模块。如下图,节点通过 EVMC 接口与 EVM 模块交互,Instance接口定义了节点对 EVM 的操作,如创建、销毁、设置等,Callback 接口定义了 EVM 对节点的操作,如 state 读写、区块信息读写等。

EVM执行合约

接下来,我们看看Scroll的zkEVM构造,重点关注区块记录的证明生成。

Scroll改进了原zcash开源的halo2,结合KZG承诺方案,为区块执行记录生成合法性证明。

执行证明分为两部分,1)State proof状态证明,用于证明State/Memory/Stack等操作正确执行了,但不检验读/写位置是否合法;2)EVM proof,用于证明在正确的时间调用了正确的操作码

1、Sequencer 提取执行记录

Scroll的Sequencer实现fork自Go-Ethereum(Geth),通过TraceChain api获取EVM在两个块之间(不包括start)执行期间创建的结构化日志,并将它们作为JSON对象返回。

BlockTrace结构体

  • StorageTrace存储电路需要的信息
     
  • ExecutionResults记录结构化日志

2、Roller 产生zk证明

 zkEVM通过Bus-Mapping解析EVM执行记录,获取结构化的witness输入,以及收集电路输入。

1)witness构建:

通过block_traces_to_witness_block函数完成,获取.json格式的执行路径后,先通过serde_json解析路径为BlockTrace,再封装为证明电路通用的结构体Block,包含区块上下文,复制约束,MPT初始值及更新后的信息等。

2)circuit构建:使用1)的block信息构建SuperCircuit,包含zkEVM构建的所有电路。

我们看下Repo的描述:

具体地:

电路类型共享查找表
  • StateCircuit → 用于验证RwTable的合法性;
  • EvmCircuit → 用于验证RwTable调用的合法性;
  • TxCircuit → 用于验证交易的合法性;
  • BytecodeCircuit → 用于验证字节码的合法性;
  • CopyCircuit → 用于验证复制约束;
  • ExpCircuit → 用于验证幂次关系;
  • KeccakCircuit → 用于验证keccak哈希;
  • PoseidonCircuit → 用于验证poseidon哈希;
  • MptCircuit → 用于验证MPT;
  • PiCircuit → 用于验证公共输入;
  • RlpCircuit → 用于验证rlp;

1. Copy Table

  • CopyCircuit
  • EvmCircuit

2. Exponentiation Table

  • EvmCircuit

3. Rw Table

  • StateCircuit
  • EvmCircuit
  • CopyCircuit

4. Keccak Table

  • KeccakCircuit
  • EvmCircuit
  • BytecodeCircuit
  • TxCircuit
  • MptCircuit

5. Tx Table

  • TxCircuit
  • EvmCircuit
  • CopyCircuit
  • PiCircuit

6. Bytecode Table

  • ByteCodeCircuit
  • EvmCircuit
  • CopyCircuit

7. Block Table

  • EvmCircuit
  • PiCircuit

8. MPT Table

  • MptCIrcuit
  • StateCircuit

3)Plonkish +  KZG承诺

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐