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的所有的行为,这些行为包括:
Anchor Protocol关于将bATOM添加为抵押品的提案已通过:4月6日消息,据官网显示,Anchor Protocol关于将bATOM添加为抵押品的22号提案已通过。根据该提案,bATOM最大贷款与价值比率(LTV)设置为60%。
此前消息,bATOM主要通过将stkATOM(由pSTAKEFinance构建)封装入Terra生态系统,使得stkATOM持有者在保证ATOM质押奖励的同时,可通过在Anchor进行抵押获得流动性。[2022/4/6 14:07:38]
?执行合约计算逻辑
?执行内存访问
?执行哈希计算
?执行世界状态更新
?...
众所周知,zk在计算压缩领域,具有极大的应用的前景;无论原始的计算多么复杂,其验证过程都十分高效,这是所有zk算法的基本技能。因此,对于VM执行过程中的计算部分,zk可以很好的发挥作用;而在VM执行的过程中,除了计算本身外,还存在一些内存访问操作,我们需要把一些数据提前放在内存里,然后在执行计算的时候取出来。
声音 | 分析师Tone Vays:Tim Draper关于比特币的预测非常不负责任:风险投资家Tim Draper曾表示,到2022年底或2023年初,BTC的价格将轻松达到25万美元。然而,前华尔街交易员、加密货币分析师Tone Vays表示,这一预测相当不负责任。Tone Vays最近在接受行业媒体Block TV采访时打趣说,他认为说比特币将在2023年达到5万美元,比Draper的言论“更负责任”。他接着解释说,他认为硅谷风险投资家Draper的呼吁更多的是试图增加点击量,并发表非理性的观点,而不是基于事实的分析。(Ethereum World News)[2019/12/23]
而由于大部分的VM都是读写内存,因此不得不约束这些内存访问操作的正确性;对于内存访问的约束本身并不复杂,但是由于内存访问的次数很高,所以导致多项式的阶数很高,使得内存相关的约束证明耗时比较可观。
关于GDEX开放FGC充提的公告:GDEX于6月6日下午14:00正式开放 GDEX.FGC 充提功能,用户可在GDEX官网、鼓鼓钱包、比特股官方钱包等渠道进行充值和提现。[2018/6/6]
在ZK(E)VM的方案中,我们更应该把zk主要应用在对于计算本身的证明,对于EVM的其他行为,我们可以在VM层面去优化,以减少zk约束的规模。
Memory的设计
以EVM为例,EVM的内存是一块很简单的字节数组,可以存储32字节或者1字节的数据,也可以读取32字节的数据。
图片来源:ethereum_evm_illustrated,page51
BTC.com关于4月10日UBTC硬分叉事件的处理公告:BTC.com 发布公告称,由于UBTC开发团队在4月10日18:47:31.0(北京时间)于区块高度506400处悄无声息地执行了硬分叉,导致UBTC块收益发生变更。为避免进一步损失,矿池已将UBTC挖矿的用户统一切换去挖BTC。目前矿池正在积极进行节点升级工作,预计需要持续一段时间。对于UBTC开发团队此次分叉行为,BTC.com承诺不会让矿池用户收益受损。对分叉前已在矿池挖UBTC的用户,在UBTC旧链上挖矿所得收益,矿池将根据后台记录以新币完成等额数量的收益发放;对分叉后受矿池错误数据影响而误切的用户(19:48后),发放新UBTC,并同时根据切入、切出时间,结合平均算力,统计出该时间段内的BTC理论收益,予以补偿。此外,因矿池打款钱包节点需要同步,UBTC挖矿收益及BTC补偿发放均会在三个工作日内完成。此次事故对于其他币种挖矿没有影响。[2018/4/11]
在EVM中,和Memory相关的指令有:
日本将在东京奥运会之前解决关于虚拟货币等的网络安全问题:日本警察署网络安全对策总部在2日举行了开设新政府大楼(被称为“网络大厦”)的仪式。其中包括部,刑事部和生活安全部等6个部门,调查人员约500人左右。警视厅首长吉田尚正表示通过去年流行的“?Ransomware”病以及今年一月发生的coincheck公司的虚拟货币流出事件可以看到网络安全的威胁越来越严重。在东京奥运会来临之前,将全力解决并得到结果。[2018/4/3]
?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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。