解读以太坊Layer2扩建方案HERMEZ的zkevm设计理念

释放双眼,带上耳机,听听看~!

ZK rollup目前不支持EVM。Zkevm选择直接支持EVM指令集,并与Solid指令集兼容。

了解layer2技术(特别是ZK rollup技术)现状的小合作伙伴知道ZK rollup目前不支持EVM,并且缺乏可编程性/可组合性,因此ZK rollup仅限于特定场景。通过zkp技术,EVM的实现过程被证明是一个极具挑战性的技术难题。

ETHcc 4会议上,HERMEZ团队介绍了他们对zkevm的理解和设计。

HERMEZ团队负责人Jordi baylina明确给出了zkevm的总体设计思想。本文梳理了对zkevm设计的理解。

虚拟机证明

Jordi在演讲开始时说:以太坊虚拟机不是为在ZK电路中运行而设计的。换句话说,zkevm本质上是困难的。EVM最初的设计没有考虑到它还需要ZK来证明。在这种情况下,有三种方法:

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

第1条:从头开始设计一个新的虚拟机,它对ZK友好,易于证明。忽略EVM。

第2条:从头开始设计一个新的虚拟机,它对ZK友好,易于证明。适应当前EVM开发工具并保持稳定性的兼容性。

第3条:直接支持EVM指令集,与SOLid指令集完全兼容。

HERMEZ团队选择了第三个。在当前环境下,其他两种方法不太经济。HERMEZ给出了选择第三种方式的原因:

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

总体来说,它具有良好的兼容性和高安全性。

总体思路

由于EVM在设计开始时没有考虑ZK电路的证明,因此有必要引入微操作码来支持实心指令集。这些中间说明更适用于电路验证。这些说明构成了UVM。EVM需要在UVM中编译和执行。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

众所周知,EVM有一些可变长度的指令,如call、DATAPCOPY、exp、create等。这些指令本质上对电路不友好。通过使用中间指令,这些指令的逻辑可以相对友好地“表达”。

对于块中的所有事务,可以逐个执行相关指令。执行模式为:旧状态+所有交易指令-gt;新身份。一个细节是状态迁移基于块,而不是事务。

多项式承诺

在继续解释实施细节之前,Jordi简要介绍了多项式承诺。多项式有两种表示法:1/系数表示法和2/点值表示法。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

给定多项式承诺(CM),验证器可以提供随机质询R。证明者必须给出R中多项式的值和承诺证明。通过Fiat-Shamir算法生成随机挑战值r,将交互式协议转化为非交互式协议。在证明多重多项式承诺的前提下,多项式之间的关系可以由值的关系来确定。以下多项式关系可通过多项式承诺证明:

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路
技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

多项式等式、多项式值等。熟悉plonk或plookup协议的小合作伙伴应该知道这些协议的基础是多项式承诺。

uVM 的整体框架

UVM由以下模块组成:ROM、ram、存储器和各种计算功能模块。主SM由子模块组成。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

必须证明程序的执行状态正确,并确保以下状态正确:

如何证明执行程序正确?

执行程序存储在ROM中。对指令和位置进行编码后,获得执行程序的多项式表示ROM(x)。多项式instrace(x)是通过以相同的方式对主SM和PC中的代码执行指令进行编码而形成的。无论代码是如何执行的(周期数、跳转模式),instrace(x)中的元素都应该属于ROM(x)。这种依赖性可以通过plookup协议来证明。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

注意,instrace指的是执行实例的跟踪。虽然plookup可以证明insttrace(x)中的元素属于ROM(x),但尚未证明insttrace(x)的执行正确性。假设insttrace中缺少一条或两条指令,这也满足依赖关系。简单地说,这种依赖性证明只能证明主要SM和ROM状态的一致性。

内存状态正确?

主SM中内存的读写应与内存RAM的状态一致。plookup协议也证明了这种一致性。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

内存RAM本身的逻辑是否正确需要额外的证明。

存储状态正确?

UVM的存储是通过键值对实现的。所有存储(键值对)都组织在Merkle树中。因此,存储模块包括Merkle树和散列计算。Plookup协议可以证明多个模块之间的一致性。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

整体证明构成

程序执行状态的正确性分为多个子模块的状态正确性验证。总之,证明包括两个部分:1/单个模块的逻辑是否正确,2/模块与模块之间的一致性。

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

证明了大量多项式的使用。验证这些多项式承诺需要不小的开销。Jordi提出了各种验证想法:

技术解读以太坊二层扩容方案 Hermez 的 zkEVM 设计思路

第一:多个Kate多项式承诺在链上得到验证。

第二:多个凯特多项式承诺通过plonk电路进行验证(配对或链上验证)。

第三:多个斯塔克多项式有望被plonk或groth16电路验证。

总结

EVM的设计没有考虑ZK电路验证。HERMEZ提出了UVM框架和指令集。作为一种中间指令集,它便于ZK电路证明,同时可以实现固态指令集。程序的执行正确性分为多个子模块状态的正确性。证明包括单个模块状态的正确性和模块之间的一致性。为了减少链上单独验证的证据数量,可以使用电路验证。

给TA买糖
共{{data.count}}人
人已赞赏
NFT资讯

以太坊+NFT:生成艺术的"黄金时代"

2021-8-12 10:51:12

头条资讯

今日必读|关于黑客和区块链安全的担忧

2021-8-12 10:58:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索