这篇文章主要介绍了zkEVM – Hermez设计思路 ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/23664.html

zkEVM – Hermez设计思路是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,zkEVM – Hermez设计思路学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉zkEVM – Hermez设计思路比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

zkEVM – Hermez设计思路

  • 零知识证明
  • Layer2

Hermez团队负责人Jordi Baylina比较清晰地给出了zkEVM大体的设计思路。本文梳理一下对zkEVM设计的理解。抛砖引玉,有理解偏差,小伙伴们可以留言讨论。

了解Layer2技术现状(特别是对zk Rollup技术)的小伙伴,知道zk Rollup目前不支持EVM,缺失可编程性/可组合性,让zk Rollup限制在特定场景。zkEVM,通过zkp技术证明EVM的执行过程是非常有挑战的技术难点。

EthCC 4会议上Hermez团队介绍了他们对zkEVM的理解和设计:

Hermez团队负责人Jordi Baylina比较清晰地给出了zkEVM大体的设计思路。本文梳理一下对zkEVM设计的理解。抛砖引玉,有理解偏差,小伙伴们可以留言讨论。

虚拟机证明

Jordi在演讲开头提出:The Ethereum Virtual Machine was not designed to run in a zk-circuit (以太坊eth虚拟机在设计时并没有考虑zk电路证明)。也就是说,zkEVM天生比较难。当初设计EVM的时候并没有考虑到后期还需要zk进行证明。在这种情况下,目前有三条路可以走:

zkEVM - Hermez设计思路

第一条:从头设计一种新的虚拟机,该虚拟机对zk友好,方便证明。不需要理会EVM。

第二条:从头设计一种新的虚拟机,该虚拟机对zk友好,方便证明。适配当前的EVM的开发工具,保持solidity兼容。

第三条:直接支持EVM指令集,完全兼容solidity指令集。

Hermez团队选择了第三条。其他两种做法在当前的环境下,不太经济。Hermez给出了选择第三条路的理由:

zkEVM - Hermez设计思路

总的来说,就是兼容性好,安全性高。

总体思路

因为EVM在设计当初没有考虑zk电路证明,支持solidity指令集需要引入中间指令(micro opcode)。这些中间指令比较适合电路证明。这些指令构成uVM。EVM需要编译在uVM中执行。

zkEVM - Hermez设计思路

众所周知,EVM有一些变长的指令,比如CALL,DATACOPY,EXP,CREATE等等。这些指令天生对电路证明不友好。利用中间指令能相对友好地“表达”出这些指令的逻辑。

对于一个区块中的所有交易,相关的指令可以一个个的执行。执行的模型是:老的状态 + 所有交易指令 -> 新的状态。一个细节是状态的迁移是以区块为单位,并不是以交易为单位的。

多项式承诺

在继续解释细节实现之前,Jordi简单介绍了一下多项式承诺。多项式有两种表示方式:1/系数表示 2/ 点值表示。

zkEVM - Hermez设计思路

在给定一个多项式承诺(cm)的情况下,验证者可以提供随机挑战r,证明者必须给出多项式在r的取值以及承诺证明。随机挑战值r,可以通过Fiat-Shamir算法产生,将交互式的协议变成非交互式协议。在给出多个多项式承诺证明的前提下,通过取值的关系可以确定多项式之间的关系。通过多项式承诺可以证明如下的多项式关系: zkEVM - Hermez设计思路

zkEVM - Hermez设计思路

多项式相等,多项式取值等等。熟悉Plonk或者Plookup协议的小伙伴应该知道,这些协议的基础就是多项式承诺。

零知识证明 – Plookup算法介绍

零知识证明 – 深入理解PlonK算法

uVM的整体框架

uVM由如下的模块组成:ROM,RAM,Storage以及各种计算功能模块。Main SM(主状态机)由子模块组成。

zkEVM - Hermez设计思路

需要证明程序的执行状态正确,要保证如下的一些状态正确:

如何证明执行程序正确?

执行程序存储在ROM中。将指令和位置进行编码后,得到执行程序的多项式表示 rom (x)。将Main SM中的代码执行指令和PC进行同样的编码后形成的多项式instTrace(x)。无论这份代码如何执行(循环的次数,跳转方式),instTrace(x)中的元素都应该属于rom(x)。这种从属关系可以采用Plookup协议进行证明。

zkEVM - Hermez设计思路

注意的是,instTrace指的是执行实例的Trace。虽然,通过Plookup能证明instTrace(x)中的元素属于rom(x),但是instTrace(x)的执行正确性并没有证明。试想一下instTrace中少一两条指令,同样满足从属关系。简单的说,这种从属证明只是证明了Main SM和ROM状态的一致性。

内存状态正确?

在Main SM中的内存的读写情况,应该和内存RAM的状态一致。这种一致也是通过Plookup协议进行证明。

zkEVM - Hermez设计思路

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

存储状态正确?

uVM的存储是通过key-value对实现。所有存储(key-value对)用merkle树进行组织。所以,存储模块包括merkle树和hash计算。Plookup协议可以证明多个模块之间的一致性。

zkEVM - Hermez设计思路

整体证明构成

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

zkEVM - Hermez设计思路

证明大量采用多项式承诺。验证这些多项式承诺需要不小的开销。Jordi提出了多种验证思路:

zkEVM - Hermez设计思路

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

第二种:多个Kate多项式承诺通过Plonk电路验证(配对还是在链上验证)。

第三种:多个Stark多项式承诺通过Plonk或者Groth16电路进行验证。

总结:

EVM在设计时并没有考虑到zk电路证明。Hermez提出了uVM框架和指令集。作为中间指令集,方便zk电路证明,同时可以实现solidity指令集。一个程序的执行正确性分割成多个子模块状态的正确性。证明包括单个模块状态的正确性以及模块和模块之间的一致性。为了减少众多的证明单独在链上验证,可以采用电路验证。

zkEVM - Hermez设计思路

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/23664.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » zkEVM – Hermez设计思路

提供最优质的资源集合

立即查看 了解详情