ConsenSys 团队发布了zkEVM规范,描述了zk-EVM算术化的目标:(1)支持所有的EVM 操作码,包含内部合约调用,错误管理和gas 管理;(2)能够执行字节码; (3) 最少的证明时间。
在目前的zk-VM方案中,zkSync将 Yul 编译为 zk-VM 友好的字节码。Cairo 采用定制化的架构适配STARK, 采用Cairo 开发智能合约。
Hermez 和 Scroll Tech 直接解释EVM 字节码,不需要中间的编译器或额外的编译部署。
zk-EVM 全局组织
zk-EVM 由以下几个应用相关的子模块组成:
- 区块相关的ROM, 包含智能合约的字节码;
- 主要的执行路径
main execution trace
, 处理指令,构建栈内存; - 应用相关的RAM, 存储,二进制或数值操作码;
- 指令解码器,分解EVM 操作码。
ROM 的主要目的是将合约字节码转为一系列 可以被 zk-EVM处理的指令。
zk-EVM 概览
Main execurtion trace
主执行路径,或者栈路径,是程序执行的核心。每个指令经过主执行路径,或者被直接处理(PUSH, POP, DUP, SWAP
),或通过bus system
发到其它模块,
RAM 模块
模拟EVM RAM是一项巨大的挑战,有一些指令在RAM 上执行,如 RETURNDATACOPY, CALLDATACOPY, RETURN, BYTECODECOPY涉及复制任意大小的words
。 另一方面, 像MSTORE,MLOAD, MSTORE8在32字节的内存中。
RAM模块可以分为两种子模块: 子RAM 和 父RAM, 它们之间的一致性通过Plookup 包含证明保证。
数值运算模块
该模块模拟EVM 256位数值运算,由三个子模块: ALU256, ALU128, ALU64
组成,
二进制,字分解模块
它们是两个单独的模块,用于分解域元素成为16位的字,然后执行二进制的操作。
存储模块
存储模块表示 EVM 可寻址的,字粒度的存储。
......