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

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的所有的行为,这些行为包括:

?执行合约计算逻辑

?执行内存访问

国际清算银行发布关于应对加密货币风险报告:金色财经报道,国际清算银行 (BIS) 建议,在经历了特别动荡的一年之后,有关加密货币的当局可以采取三种不同的方法:监管、遏制或呼吁全面禁止该行业。 根据周四发布的关于应对加密货币风险的报告,全球央行行长们还提出了一种替代方案,即通过央行数字货币“鼓励健全的创新” 。BIS 概述了这三种方法中每一种方法的优点和缺点,并指出可以将它们混合和匹配以应用于他们认为的不同风险。围绕 FTX 崩溃和稳定币 TerraUSD 崩溃的持续传奇是引用的主要事件。

报告称,如果没有像中心化交易所这样的“网关”,“加密货币将不得不依赖用户使用私钥在数字钱包中自行保管他们的资金”。禁止加密将是一种“极端选择”并限制创新。国际清算银行表示,禁止无边界的去中心化活动很困难,而禁止中心化中介会更有效。但可能会将此类活动推向另一个司法管辖区,或将加密货币与传统金融经济隔离开来,并以类似于金融服务部门的方式对该部门进行监管。[2023/1/13 11:09:22]

?执行哈希计算

关于“在Polkadot上注册Shell平行链”的第121号动议已开启投票:Polkadot在推特上表示,第121号动议现已开启投票。该动议提出在Polkadot上注册Shell平行链,以确保区块生产、包含和最终完成。Shell平行链的功能极其有限,它甚至没有帐户的概念。Shell只接受来自中继链的消息来升级自身。在争议代码激活后,Shell最终可以通过进行另一次公投升级为Statemint。如果委员会通过,该动议将进行公投。[2021/10/29 6:20:18]

?执行世界状态更新

?...

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

孙宇晨发表关于未来波场网络民主治理和发展的公开信:据最新消息,波场TRON创始人兼BitTorrent?CEO孙宇晨刚刚发表了关于未来波场网络民主治理和发展的公开信,孙宇晨表示:“波场网络每日平均处理交易请求超过170万笔,是行业最为重要的底层基础设施与二层网络,我个人最为关心的是,将波场打造成一个具有良好治理激励机制的,快速高效,费用极具竞争力的去中心化网络,这也是波场的核心愿景。我认为网络日后的发展方向,应当将TRX网络的整体手续费分享给超级代表,然后由超级代表来分配给背后的质押投票人。如果说比特币是数字黄金,那么波场就是数字石油,波场将成为数字货币领域从事经济活动的必需消耗品!”[2020/11/30 22:36:55]

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

声音 | 靠近央行人士回应:福布斯关于数字货币发行的传闻为不准确猜测:靠近央行人士回应新浪财经称,央行数字货币最快80天内落地,由阿里腾讯等7大机构发行为不准确猜测。今日早间,福布斯发布报道称:据知情人士透露,中国央行将在未来几个月内正式推出数字货币,初期将向中国工商银行、中国建设银行、中国银行、中国农业银行、阿里巴巴、腾讯以及银联七家机构发行。据一位前政府工作人员透露,央行数字货币可能会在今年11月11日正式推出。[2019/8/28]

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

Memory的设计

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

美国19个州正在申请关于数字货币的免税提案:怀俄明州参议院初步批准了一项免除该州数字货币税收的法案。法案的共同发起人——民主党参议员克里斯?罗斯菲斯表示,美国怀俄明州参议院委员会22日一致通过了这项法案。另一名共同发起人——参议员塔拉?尼瑟科特表示,她预计法案将在参议院将获得最终批准。美国国税局此前已裁定数字货币作为纳税的财产。根据美国国家立法会议(NCSL)的数据,除了怀俄明州以外,美国还有19个州正在申请关于数字和虚拟货币的免税提案。[2018/2/23]

图片来源: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-0:810ms