以太坊虚拟机是一个基于以太坊区块链的代码运行环境。契约代码可以完全与外界隔离,在EVM内部运行,主要功能是处理以太坊系统中的智能契约。以太坊之所以是图灵完全,是因为开发者可以用Solidity语言创建运行在EVM上的应用,所有可计算的问题都可以计算。但是图灵还不够。人们试图在ZK证明系统中封装EVM,但问题是封装时会产生大量冗余。Fox发明的“小表模式”zkEVM保证了原生Solidity Ethereum开发者可以无缝迁移到zkEVM,同时将大大降低EVM到ZK证明系统打包时的冗余成本。
自2015年问世以来,EVM一直在经历史诗般的ZK转型。这个大转变主要有两个方向。
第一个方向是所谓的zkVM赛道,致力于将应用的性能提升到最好,与以太坊虚拟机的兼容性不是首要考虑的。有两个子方向。一种是制作自己的DSL(领域特定语言)。比如StarkWare正在努力推广开罗语,这并不难。第二个目标是兼容现有的成熟语言。比如RISC Zero致力于让zkVM兼容C++/Rust。这条赛道的难点在于,由于指令集ISA的引入,最终输出的约束更加复杂。
第二个方向就是所谓的zkEVM赛道。这个赛道项目致力于EVM字节码的兼容性,即字节码级别及以上的EVM代码都通过zkEVM生成相应的零知识证明,让原生Solidity Ethereum开发者可以免费迁移到ZkEVM。这条赛道的赛车手主要有Polygon zkEVM,Scroll,Taiko,Fox。这条赛道的难点在于与EVM兼容的冗余成本,不适合ZK认证体系的封装。经过长时间的思考和论证,Fox终于找到了从根本上减少第一代zkEVM庞大冗余的关键:“小桌子模式”zkEVM。
数据和证明电路是zkEVM生成证明的两个核心要素。一方面,在zkEVM中,证明者需要交易中涉及的所有数据来证明交易带来的状态转换是正确的,但是EVM中的数据量大且复杂。因此,如何安排和组织证明所需的数据是一个需要仔细考虑的问题,以构建一个高效的zkEVM。另一方面,如何通过一系列电路约束高效地证明(或测试)计算执行的有效性和正确性,是保证zkEVM安全性的基础。
先说第二个问题,因为这是所有设计zkEVM的团队都需要考虑的问题。这个问题的本质其实是“我们要证明什么?”目前大家对这个问题的想法都差不多。因为一个事务(或者它涉及的操作码)可能是多种多样的,直接证明每一步带来的状态变化都是按顺序正确的是不现实的,所以我们需要分类证明。
图1:两代zkEVM解决方案:大桌子和小桌子。比如我们把每个栈中元素的变化放在一起,专门写一个栈电路证明,专门写一套算术电路进行简单的算术运算。这样每个电路需要考虑的情况就变得相对简单了。这些功能不同的电路在不同的zkEVM中有不同的名称。有人直接称之为电路,有人称之为(子)状态机,但这种思想的本质是一样的。
为了更清楚地解释这一点的意义,我们举一个例子,假设现在要证明加法运算(取出栈的最后两个元素,把它们的和放回栈顶):
假设原始堆栈是
那么如果不分类拆分的话,就需要尝试证明stack在上述操作之后变成了。
而如果分类是拆分的,我们只需要分别证明以下事情:
堆叠电路:
C1:证明流行变成2和4。
C2:在证明了推(6)之后,它就变成了
算术电路:
C3: a+b=c 2,B = 4,C = 6,证明了a+b=c
值得注意的是,证明的复杂度与电路需要考虑的各种情况的数量有关。如果不分类拆分,电路需要覆盖的可能性会非常巨大。
1,3,5,4
图2:第一代zkEVM采用大表模式,一旦分类拆分,各部分的情况会变得相对简单,从而证明难度会明显降低。
但是分类拆分也会带来其他问题,就是不同类型电路的数据一致性问题。例如,在上面的例子中,我们实际上需要证明以下两件事:
C4:“C1的持久性有机污染物数量”=“C3的A和B”
C5:“C2的推送次数”=“C3的推送次数”
为了解决这个问题,我们回到第一个问题,即我们如何组织交易中涉及的数据?接下来我们来讨论这个话题:
一个直观的方法是这样的:通过trace,我们可以拆解所有事务涉及的每一个步骤,知道涉及的数据,通过向节点发送请求,获取trace中没有的数据。然后,我们将它排列成一个大表T,如下所示:
“第一步操作”和“第一步操作中涉及的数据”
“第二步操作”和“第二步操作中涉及的数据”
…
“步骤n中的操作”和“步骤n中的操作所涉及的数据”
这样,在上面的例子中,我们将有一行记录
步骤K:加法“a=2,b=4,c=6”
而C4的上述情况可以证明如下:
C4(a):C1波普给出的数字与大表t中的步骤k一致
C4(A):C3的A和B与表t中的步骤K一致
C5也差不多。这种操作(证明某些元素已经出现在表中)称为查找。本文不详细介绍lookup的具体算法,但可想而知,lookup操作的复杂度与大表t的大小密切相关,所以,现在我们回到第一个问题:如何组织证明中将要用到的数据?
1,3,5
图3:福克斯发明的zkEVM。我们考虑以下一系列表结构:
表格Ta:
“类型A的第一个操作”和“类型A的第一个操作中涉及的数据”
“类型a的第二次操作”和“类型a的第二次操作中涉及的数据”
…
“类型A的第m次运算”和“类型A的第m次运算所涉及的数据”
表格Tb:
“类型b的第一个操作”和“类型b的第一个操作中涉及的数据”
“类型b的第二次操作”和“类型b的第二次操作中涉及的数据”
…
“类型b的第m次操作”和“类型b的第n次操作中涉及的数据”
…
这样构造多个小表的好处是,当我们可以根据所需数据涉及的操作类型直接在对应的小表中查找时,效率可以大大提高。
举个简单的例子(假设我们一次只能查找一个元素)如果我们要证明a~h这八个字母存在于[a,b,c,d,E,F,g,h]中,我们需要查找一个大小为8的表八次,但是如果我们把表分成[a,b,c,d]和[E,F]
FOX的layer2 zkEVM中使用了这种小表格设计来提高效率。为了保证所有情况下的完全证明,具体的小表拆分方法需要精心设计,提高效率的关键在于表内容的分类及其大小的平衡。虽然在这个框架中实现完整的zkEVM还需要大量的工作,但是我们期待这样的zkEVM在性能上有所突破。
结论:Fox发明的“小表模式”zkEVM可以保证原生Solidity Ethereum开发者可以无成本迁移到zkEVM,同时大大降低了EVM到ZK证明系统打包时的冗余成本。这是zkEVM结构上的重大变化,将对以太坊的扩张计划产生深远影响。
本网站声明:网站内容来源于网络。如有侵权,请联系我们,我们会及时处理。
温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信,我们会及时处理和回复。
原文地址"excel中的小表,小表格是什么意思":http://www.ljycsb.cn/qukuailian/232157.html。

微信扫描二维码投放广告
▲长按图片识别二维码