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

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

动态 | FATF发布了关于数字身份的指导草案 内容提及DLT技术和交易所:金融行动特别工作组(FATF)周四发布了其关于数字身份的指导草案,以供政府、受监管实体和其他利益相关者执行反(AML)和反融资恐怖主义(CFT)法规。该指导文件指出,随着金融交易过程越来越数字化,这个政府间组织的目标是解决新兴的安全和透明度问题。FATF在其网站上列出了一系列作为“关注领域”的问题,要求私营利益相关者在2019年11月29日前通过电子邮件提供反馈。值得注意的是,该指南特别列出了分布式账本技术(DLT),作为一种可以帮助数字身份网络增长的工具。许多区块链公司已经将目光投向这一特定领域,例如思域。FATF在其指导意见中呼吁当局“制定明确的指导方针或法规,允许受AML/CFT监管的实体适当、基于风险的使用可靠、独立的数字身份识别系统。”FATF建议受到监管的机构,如加密货币交易所,“采取一种明智方式,依靠数字身份系统对客户进行尽职调查。”(coindesk)[2019/11/4]

?执行合约计算逻辑

声音 | BB:关于VOICE在中国的落地细节将会很快公布:据MEET.ONE消息,Block.one CEO BB刚刚在电报群解答社区对Voice的疑问,要点如下: 1.可以把voice看作是有史以来最公平的token分配。 有了voice,用户KYC之后,每个人每天都有平等的话语权; 2.针对为什么要KYC的质疑,BB回复:Voice是有能力匿名发布的,但出于合规考虑,KYC是难以避免的。如果你宁愿使用一个出售你的数据去获利的平台,也不愿意KYC的话,你也可以选择保持现状。另外,我们的KYC会遵守法律, 不会公布个人信息; 3.从价值和用户体验的角度来说,我们相信Voice的积极影响远远超过消极一面的, 大众会很快意识到这一点 ; 4.我们正在努力解决唯一身份验证问题,它的确切形式还有待最终确定, 我们希望利用KYC将价值返还给用户; 5.关于“中国用户能否 KYC”的问题,BB回复称更多关于中国用户落地细节很快会发布。[2019/6/5]

?执行内存访问

关于变更OKEx投票奖励公告:为了配合OKEx防贿票选规则,TrustNote项目方现决定取消原支持投票奖励政策,重新调整社区支持OKEx投票奖励,具体激励政策敬请关注OKEx官方信息公告。[2018/6/1]

?执行哈希计算

?执行世界状态更新

?...

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

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

BitTrade发布关于无法显示该交易所网站或不能登录时的解决方案:据日本BitTrade交易所官网,因受22日14:00完成的系统维护的影响,一部分用户发现了无法显示该交易所网站或不能登录的现象。如遇此情况,可通过清除网页浏览历史记录来解决此问题。[2018/5/23]

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

Memory的设计

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

Bitstar关于ETF分叉处理公告:Bitstar关于ETF分叉处理公告。尊敬的用户:

根据Twitter“ETF基金会”官方公布的消息,2017年12月14日18:36(格林威治时间+8),“ETF分叉点已发生4730660区块高度”。每个ETH持有者将以1:1的比例获得ETF。在这里值得一提的是,ETF团队原本预计2018年1月1日的分叉点将发生在4830000区块高度。但是突然发布的消息17年12月14日16点21分,这表明分叉将提前在4730999区块高度进行。此外,最终叉子发生在17年12月14日18:36,区块高度为4730660。

我们不理解团队频繁更换分叉计划的方式,而无需向用户和市场进行任何预先通知。如果将来发生类似事件,我们不承诺无疑会接受BitStar的货币交付。

在对BitStar用户负责任的态度下,我们仍然会根据资产快照在这个高度下向比赛的用户提供比例ETF 4730999。我们已经考虑过BitStar用户对339个区块的差异值会有轻微的影响。[2017/12/15]

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

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

金智博客

BNBWirex现已支持USDD-ODAILY_Wirex:USDD

据官方消息,Wirex已支持USDD,用户现可通过Wirex存款、购买或消费USDD。 动态 | FATF发布了关于数字身份的指导草案 内容提及DLT技术和交易所:金融行动特别工作组(FATF).

[0:0ms0-3:926ms