web3基于zkEVM的L2扩容方案-Scroll

devtools/2024/12/29 9:03:45/

web3Scroll原理调研报告-项目简介">项目简介

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万美元

web3Scroll原理调研报告-核心价值">核心价值

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

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

web3Scroll原理调研报告-竞品">竞品

  • 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

web3Scroll原理调研报告-项目架构及原理">项目架构及原理

web3Scroll原理调研报告-Scroll架构">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交易数据可用性,及证明验证。

 

web3Scroll原理调研报告-Scroll工作流">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完成确认。

 

web3Scroll原理调研报告-核心技术实现">核心技术实现

与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,用于证明在正确的时间调用了正确的操作码

web3Scroll原理调研报告-1、Sequencer提取执行记录">1、Sequencer 提取执行记录

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

BlockTrace结构体

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

web3Scroll原理调研报告-2、Roller产生zk证明">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承诺


http://www.ppmy.cn/devtools/146342.html

相关文章

简单讲解关于微信小程序调整 miniprogram 后, tabbar 找不到图片的原因之一

微信小程序开发,[ miniprogram/app.json 文件内容错误],["tabBar"]["list"][0]["iconPath"]: "/miniprogram/assets/tabbar/icon_main_home.png" 未找到 简单讲解关于调整 miniprogram 后, tabbar 找…

NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

Springboot使用外置的Servlet容器

嵌入式Servlet容器:应用打成可执行的jar 优点:简单、便携 缺点:默认不支持JSP、优化定制比较复杂 外置的Servlet容器:外面安装Tomcat---应用war包的方式打包 一.嵌入式tomcat启动项目步骤: 1.创建一个普通maven项目…

Python 自动化 打开网站 填表登陆 例子

图样 简价: 简要说明这个程序的功能: 1. **基本功能**: - 自动打开网站 - 自动填写登录信息(号、公司名称、密码) - 显示半透明状态窗口实时提示操作进度 2. **操作流程**: - 打开网站后自动…

小程序基础 —— 02 微信小程序账号注册

微信小程序账号注册 小程序开发与网页开发不一样,在开始微信小程序开发之前,需要访问微信公众平台,注册一个微信小程序账号。 有了小程序的账号以后,才可以开发和管理小程序,后续需要通过该账号进行开发信息的设置、…

Linux-Ubuntu之串口通信

Linux-Ubuntu之串口通信 一,串口通信1.串口通信寄存器配置2.串口通信软件实现①手动波特率②自动波特率③主函数 二,printf和scanf实现串口的输入显示 一,串口通信 1.串口通信寄存器配置 串口通信利用接口是这个TTL,下载程序用的…

EKF 自动匹配维度 MATLAB代码

该 M A T L A B MATLAB MATLAB代码实现了扩展卡尔曼滤波( E

flink cdc使用flink sql方式运行一直报Make sure a planner module is on the classpath

flink cdc使用flink sql方式运行一直报Make sure a planner module is on the classpath 引入jar包信息: flink-connector-oracle-cdc:3.2.1 flink:1.20.0 flink-table-runtime:1.20.0 flink-streaming-java:1.20.0 flink-clients:1.20.0 Exception in thread &q…