Polygon zkEVM 是EVM的zkRollup方案,可以提供智能合约支持,用以提升以太坊的可扩展性。
架构
Polygon zkEVM 的架构图如下:
主要包含以下组件:
- PoE (Proof of Efficiency) 共识机制
- zkNode 节点软件
- zkProver
- LX-to-LY 桥
- 序列器 (Sequencers)
- 聚合器 (Aggregators)
- 活跃用户
共识机制: PoE
Polygon Hermez 1.0 采用PoD共识,通过竞拍赢得产块机会,2.0则采用更简单的PoE模型,具有去中心化,高效,安全的特征。
数据可用性的混合机制
完全将数据放于链上的成本较高,有两种折中机制:
- Validium: 数据链下存储,只有证明发布在链上;
- Volition: 对于有些交易,数据和证明都在链上;对于其它一些交易,只有证明上链。
目前,Polygon zkEVM还有确定好最终的实现方案。
PoE 智能合约
zkEVM 使用两种类型的参与者实现批量交易状态转移的证明:
- Sequencers: 打包网络中的批量交易,添加到PoE 合约中;
- Aggregators: 检查交易的有效性,提供有效性证明。任何公开的Aggregator 都可以提交证明,以验证状态转移的有效性。
PoE 智能合约,有两种基本调用: 一方面从Sequencers 获取批量交易,另一方面从Aggregators 获取有效性验证。
Sequencers
序列器从用户获取L2交易,批量提交到PoE 智能合约作为有效的L2交易。
- 任何人都可以运行zkEVM 节点成为Sequencer;
- Sequencer 需要支付费用 (MATIC),用于获取批量提交交易的权利;
- Sequencer 通过用户发起的交易手续费用进行激励;
Aggregators
Aggregator 接收到由Sequencer 提交的批量交易后,将其发给Prover, 通过复杂的多项式计算生成零知识证明,然后提交到智能合约验证证明。
- Aggregators 主要是为L2 的交易提供有效性证明;
- 除了运行zkEVM 节点软件,Aggregators 需要专用的硬件创建有效的零知识证明,也称为zkProver.
- 对于给定的批量交易,若Aggregator 提交了有效的证明,可以赚取Matic 手续费,由Sequencer 支付;
- Aggregators 通过竞争方式获取生机有效性证明的机会。
zkNode
zkNode 是zkEVM 节点软件,用于实现同步和参与者治理的客户端,主要的组成架构为:
- Sequencers 和 Aggregators: Polygon zkEVM 参与者可以选择他们的参与方式。或者只同步网络的状态,
或者作为Sequencer 或 Aggregator, Aggregator 运行zkEVM最核心的部分: zkProver.
- Synchronizer: 除了同步和验证过程,当批量交易添加到L1上后,还需要进行同步过程,通过Synchronizer 完成,用于从智能合约获取数据,包含Sequencers 提交的交易和Aggreator 提交的证明。所有的数据存在一个数据库中,通过 JSON-RPC 为第三方提供服务。
Synchronizer 负责从以太坊区块链读取事件,包括新提交的批量,保持状态完全同步。读取的事件信息存储在区块链中。Synchronizer 也处理可能的重组,通过检测ethBlockNum
和 ethBlockHash
。
zkNode 的架构是模块化的,并实现的的功能有:
- RPC: RPC 能够使zkEVM 和现有各种工具整合,包含Metamask, Etherscan, 和 Infura等;
- State: 实现 Merkle Tree 组件,连接DB 后端,检验区块的完整性和交易的有效性,存储智能合约的代码;
- zkProver: 实现交易有效性的验证规则,执行复杂的多项式计算和汇编语言,由智能合约验证。zkProver 是最复杂的模块,需要开发新的编程语言。
zkProver
zkEVM 利用高级零知识证明技术创建有效性证明,每个Aggregator 使用zkProver 验证批量的交易,提供有效性证明,zkProver的架构如下所示:, 由Main State Machine Executor, a collection of secondary State Machines, a STARK-proof builder, a SNARK-proof builder组成,分别如下:
- Main State Machine Executor: 主执行器负责zkEVM的执行,将EVM 字节码转换为ZK 汇编语言(zkASM)。 主执行器也设置批量交易的多项式约束,另一种语言PIL (Polynomial Identity Language),用来编码所有的多项式约束。
- Secondary State Machines:zkEVM中的每个计算是一个状态机,例如执行按位运算的功能(XORing, padding等), hashing (Keccak, Poseidon)等,验证签名(ECDSA).
状态机主要包含: Binary SM, Memory SM,Storage SM, Poseideon SM, Keccak SM, Arithmetic SM。
STARK Proof Builder: STARK ( Scalable Transparent Argument of Knowledge) 无需要可信设置,生成STARK 证明,以实现所有的多项式约束条件。STARK 采用FRI 实现零知识证明。
**SNARK Proof Builder: ** SNARK (Succint Non-interactive Argument of Knowledge) 用以实现验证证明的系统。由于STARK proof 比较大,zkEVM 使用 SNARK 以证明 STARK proof的正确性, SNARK 证明更容易验证,并且比较小。zkEVM 需要确定是采用PLONK 或者GROTH16 SNARK 证明。
LX-to-LY 桥
LX-LY 桥主要使用户在不同的网络转移资产。L1-L2是zkEVM 去中心化的桥,用于存款和取款,有两个智合约,每层分别部署一个。
L1和L2 合约除了部署的位置,其它是类似的。 Bridge L1 合约部署在以太读主网上,Bridge L2 合约部署在具体的rollups上。 L2互操作机制允许资产在L2网络之间转移。
Bridge L1 Contract
Bridge L1 合约执行两种操作: bridge
和 claim
. bridge
用于在rollup 之间转移资产,claim
用于当用户在rollup 发起 claim
的时候。
Bridge L1 合约有两个Merkle 树:globalExitTree
和 mainnet exit tree
。 globalExitTree
包含所有rollups退出树的信息,mainnet exit tree
主要是用户在主网发起交易的信息。
Bridge L2 合约
Bridge L2 合约部署在L2 上,在创世的时候设置ether
, 用于支持原生的ether
的minting/burning 操作。Bridge L2合约需要globalExitTree
中的所有rollups中exit trees的信息。
**LX-to-LY Brige **
zkEVM 不仅支持L2与主网,也支持L2与L2之间进行资产转移,因为称为LX-to-LY
桥。
zkEVM 设计目标
permissionless: 共识算法允许任何人都有机会成为Sequencer
和 Aggregator
;
decentralization: 数据可用性对去中心化至关重要,每个用户需要有充足的数据重建rollup的状态,目前zkEVM项目方还需要确认更好的数据可用性配置策略。
安全性: 采用zkRollup 实现与以太坊同等的安全性。
效率
zkEVM 采用多种策略提升效率,如下:
- 部署PoE, 激励最有效的aggregators 参与证明生成过程;
- 执行链下的计算,只在链上保留必要的数据 和 zk-proofs;
- 采用UTXO 方式实现bridge smart contract, 只使用
Exit Tree Roots
; - 采用专用的密码组件加速计算和减少证明大小,例如:
- 采用zkASM 转换字节码;
- 采用zk-STARK提升证明者速度,采用zk-SNARK 验证zk-STARK证明,缩小证明大小,减少gas花费。
结论
zkEVM要与智能合约无缝衔接,兼容EVM 指令,同时保证安全,高效和去中心化,下一步zkEVM将部署公开的测试网。
参考
https://docs.hermez.io/
https://ethresear.ch/t/proof-of-efficiency-a-new-consensus-mechanism-for-zk-rollups/11988
https://docs.google.com/presentation/d/1gfB6WZMvM9mmDKofFibIgsyYShdf0RV_Y8TLz3k1Ls0/edit#slide=id.p