MEM:关于在ZKEVM中移除内存限制的一些想法-ODAILY_MOR

ZKEVM是一个具有可编程性,以ZK技术为基础的虚拟机,它可以为虚拟机执行的所有操作生成一个零知识证明,用来证明虚拟机执行操作的正确性。有关ZKEVM的几种实现方案介绍及优劣对比,可以参考V神的文章:ThedifferenttypesofZK-EVMs;如果你想了解更多的设计细节,你也可以阅读PSE的ZKEVM方案(native-level):privacy-scaling-explorations/zkevm-specsPolygon的ZKEVM设计(bytecode-level):PolygonzkEVMDocumentation;Sin7y的ZKEVM设计(language-level):OlaVM:AnEthereumcompatibleZKVM。\n\n无论是哪种方案,都需要用zk去约束VM的所有的行为,这些行为包括:

赵长鹏:明确的监管框架至关重要,正积极与各地监管机构进行对话:金色财经报道,币安创始人赵长鹏在出席2023年香港Web3 Festival活动中谈及全球监管机构对加密货币的态度时表示,当一个行业发展到一定程度时,很容易出现损害其它人利益的行为,此时就需要监管的介入。但在行业发展初期,有时候严格监管会影响创新进程。监管机构试图用传统金融的监管手段对加密货币进行监管,但加密货币类型不一,有的像证券,有的像大宗商品,有的像公用 Token,监管机构需要有一些行业经验。就要求企业必须非常积极的去跟监管机构打交道,也需要一段时间才能够找到最佳的最优化的平衡。我们也在世界各国非常积极主动的跟监管机构交流打交道,包括香港。[2023/4/12 13:59:20]

?执行合约计算逻辑

?执行内存访问

火币论坛对话汪弘彬:从技术层面来说,区块链将在金融领域发挥领先作用:新加坡时间12月30日下午,欧洲货币机构投资者集团大中华区CEO汪弘彬做客火币论坛,以“回顾与展望,从疫情到复苏”为主题,与火币商务副总裁Ciara探讨在疫情的持续影响下,企业该如何进行数字化转型。

汪弘彬认为,疫情推动了数字浪潮的发展,从技术层面来说,区块链和加密货币行业将在金融领域发挥领先作用,并且会迅速成长为不同于大数据、人工智能和物联网的另一种新技术,未来势必会有很大的发展空间。比特币在2020年表现突出。但如果比特币要成长为更成熟的资产类别的话,必须要经历一系列的周期,比特币至今还没有一个完整的周期。成熟的机构投资者要了解这一点,然后再进入这个市场。

“据我个人观察,比特币的资产类别变得愈来愈清晰了,这会吸引越来越多的机构进入这个市场,但我们还是要从宏观角度来看比特币整体周期的发展。但从长远来看,我对这类资产很乐观。”汪弘彬最后总结道。[2020/12/31 16:08:51]

?执行哈希计算

怀俄明州当选参议员:希望“将比特币纳入全国对话”:11月15日消息,上周五,怀俄明州当选参议员Cynthia Lummis在接受ABC新闻节目“GMA3: What You Need To Know on Friday”的采访时再次表示支持比特币的普及,甚至表示她确实“希望将比特币纳入全国对话”。在Twitter上广为传播的一段视频中,这位即将成为怀俄明州代表的参议员(可能是迄今为止最高调地谈论数字货币的美国官员)列举了她作为前州财政部长的经历,解释了她为什么相信比特币的未来:“我是前州财政部长,我投资我们州的永久性基金,所以我一直在寻找一个好的价值存储,比特币符合这一要求。[2020/11/15 20:51:44]

?执行世界状态更新

?...

众所周知,zk在计算压缩领域,具有极大的应用的前景;无论原始的计算多么复杂,其验证过程都十分高效,这是所有zk算法的基本技能。因此,对于VM执行过程中的计算部分,zk可以很好的发挥作用;而在VM执行的过程中,除了计算本身外,还存在一些内存访问操作,我们需要把一些数据提前放在内存里,然后在执行计算的时候取出来。

币信对话Nic Carter:区块链更像是批发网络 而不是零售网络:币信全球商务拓展总监在币信直播间对话Coin Metrics创始人Nic Carter,探讨早期互联网发展和比特币发展。Nic Carter表示:我认为主要区别在于这是一场货币革命,而互联网是一场通信革命。在全球范围内,资本第一次真正变得无摩擦。这是一个巨大的变化。我认为这最终将杀死最弱的主权货币,因为它们会选择更坚挺的货币(例如美元)并拒绝本国货币,就像厄瓜多尔那样。比特币是一种非国家货币商品,如果人们选择它,它有可能成为中立的全球储备资产。互联网在其历史的大部分时间内还是一场面向消费者的革命,而我想说的是,公共区块链更像是批发网络,而不是零售网络。从根本上讲,普通用户很难存储私钥并且安全地进行交易。因此,我们看到了行业中出现大量中间媒介。我认为大多数用户最终都将通过银行、交易所或托管人与公共区块链进行交互。但是无论如何,他们将从这些资产中获得全部价值。[2020/7/3]

而由于大部分的VM都是读写内存,因此不得不约束这些内存访问操作的正确性;对于内存访问的约束本身并不复杂,但是由于内存访问的次数很高,所以导致多项式的阶数很高,使得内存相关的约束证明耗时比较可观。

eToro报告:围绕加密资产作为替代资产类别的在线对话持续增长:加密投资平台eToro今日发布季度报告。报告提出三个发现:1.在宏观经济不确定性的背景下,围绕加密资产作为替代资产类别的在线对话持续增长;2.在谈论比特币的头条新闻中,相对和绝对提及黄金的现象达到了历史新高;3.随着冠状病在第一季度开始主导对话,与标准普尔500指数相比,比特币的情绪与黄金之间的关联变得更加明显。(Dailyhodl)[2020/4/19]

在ZK(E)VM的方案中,我们更应该把zk主要应用在对于计算本身的证明,对于EVM的其他行为,我们可以在VM层面去优化,以减少zk约束的规模。

Memory的设计

以EVM为例,EVM的内存是一块很简单的字节数组,可以存储32字节或者1字节的数据,也可以读取32字节的数据。

图片来源:ethereum_evm_illustrated,page51

在EVM中,和Memory相关的指令有:

?MLOAD(x):从地址x处加载32字节的数据到调用栈(stack)

?MSTORE(x,y):从地址x开始,写入32字节的y

?MSTORE8(x,y):从地址x开始,写入8字节的y(低位开始)\n有兴趣的读者可以在EVMPlayground上感受下,上述内存操作带来的内存和栈的变化。

Memory的约束

在OlaVM的5.3.5节,你可以看到关于Memory约束的设计原则(OlaVM内存相关的指令和EVM类似)。

在OlaVM中,RAM的所有操作组成一个独立的table,table里的内容由memory和storage两种类型组成。在这里,我们只关注对于memory的约束。\n内存的操作类型大体可以分为三类:

?Init操作

?write操作

?read操作

触发Init的场景有三种,分别是ctx的变换,type的变化,addr的变化;当任何一个场景触发时,需要约束,操作类型为w(write),v(value)为0。

当上述三种场景没有触发时,则需要根据当前的操作类型来约束;

?如果是w(write)操作,需要约束clk是递增的,写入的值v是对的。

?如果是r(read)操作,需要约束clk是递增的,读取的值和上次写入的值是相同的。

一些可能性提升

?对于Init操作,需要约束一个内存地址的初始化的值为0么?

我认为没有必要对初始化的操作进行约束;实际上,对于任何地址,你可以约束它的第一次访问必须是write操作,而不是read操作;而如果是write-once内存模型,这个限制将天然存在,因此,如果虚拟机的内存模型改为write-once模型,将减少对内存的访问约束。

?对于read操作,能否避免对应的约束,即避免校验读取的值和上次写入的值一致?

由于VM本身定义的memory类型的读写内存,无法保证,VM在读取这个内存地址的值之前,这个地址的值没有被修改,因此需要增加一个相等性校验,如下图所示:

由此可以看出,产生这个约束的核心原因,内存模型是读写内存,地址的值存在被改写的可能,因此,如果尝试使用只读内存,那么就不需要在memory的约束去实现上述的一致性约束。

注意:这可能会增加虚拟机的实现难度,因为这是一个不常用的内存模型;并且,我们应该不会首先在这个虚拟机上面去定义一个高级DSL,因为这个语言对Dapp开发者会有些不友好,需要在编译器层面去消除,使得这些不友好,对开发者不可见。\n\n所以,如果采用上述内存模型,内存模块的约束,将只剩下针对write操作的约束,即使用copyconstraints来保证写入的值是对的即可。无须约束:

?读取的值等于写入的值,因为内存只能被写一次

?读的clk大于写的clk,因为只能先写再读

?内存的初始化值为0

参考

ethereum_evm_illustrated,page51

关于我们

Sin7y成立于2021年,由顶尖的区块链开发者组成。我们既是项目孵化器也是区块链技术研究团队,探索EVM、Layer2、跨链、隐私计算、自主支付解决方案等最重要和最前沿的技术。

微信公众号:Sin7Y

GitHub|Twitter|Telegram|Medium|Mirror|HackMD|HackerNoon

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

[0:15ms0-3:431ms