Sin7y团队解读:关于在 ZKEVM 中移除内存限制的一些想法_SIN:togetherbnb游戏攻略

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

无论是哪种方案,都需要用zk去约束VM的所有的行为,这些行为包括:

?执行合约计算逻辑

??执行内存访问

??执行哈希计算

??执行世界状态更新

??...

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

Fox Business记者:SBF将于今日入狱:金色财经报道,Fox Business记者Eleanor Terrett在其推文中表示,Lewis Kaplan法官拒绝了辩方在上诉期间推迟拘留的请求,SBF将于今日入狱,他可能会被关押在 Putnam县或布鲁克林的MDC监狱。[2023/8/12 16:21:54]

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

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

Memory的设计

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

Beosin:稳定币协议Steadifi遭到攻击损失约114万美元:金色财经报道,据Beosin EagleEye监测发现,稳定币协议Steadifi遭到攻击,攻击者获取了协议部署钱包的控制权。攻击者已将所有金库(借贷和策略)投资组合的所有权转移至自己控制的钱包(0x9cf71F2ff126B9743319B60d2D873F0E508810dc),目前,攻击者已在Arbitrum和Avalanche上耗尽了所有可借出资金,并通过跨链桥将资产兑换成以太币转移到以太坊主网,被盗资金约1,140,000美元。

Steadifi正与攻击者进行谈判,提供10%的赏金以换回剩余90%的被盗资产。[2023/8/8 21:31:18]

图片来源:ethereum_evm_illustrated,page51

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

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

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

ForthTech与新火科技旗下MPC自托管平台Sinohope达成合作:据官方消息,新火科技旗下MPC自托管平台Sinohope宣布正式与以数据与技术驱动的加密技术服务公司ForthTech达成合作协议,双方将围绕虚拟资产安全及合规托管技术进行深度沟通与密切合作。

ForthTech是一家以数据与技术驱动的加密技术服务公司。从事量化交易、做市商、流动性提供、节点部署等服务,充分运用AI算法,帮助客户安全稳定地实现数字资产的保值增值。在策略研发、数据库处理、服务器建设与维护、IT实现、安全风控等领域有较强经验。[2023/5/22 15:18:49]

???MSTORE8(x,y):从地址x开始,写入8字节的y(低位开始)

有兴趣的读者可以在EVMPlayground上感受下,上述内存操作带来的内存和栈的变化。

Memory的约束

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

Beosin:黑地址FTX Accounts Drainer已对大额资产进行兑换转移跨链等操作:金色财经报道,根据区块链安全审计公司Beosin旗下Beosin EagleEye 安全风险监控、预警与阻断平台监测显示,截止2022年11月15日,黑地址FTX Accounts Drainer(0x59AB...32b)已对大额资产进行兑换转移跨链等操作。

目前大部分资金位于账户FTX Accounts Drainer的ETH平台,约228,523 个ETH($288,934,108)和8,184 个PAXG($14,395,174)。BSC平台约108,454 个BNB($29,962,644) 和1,685,309 个DAI($1,686,562) 。

其他部分资金位于ETH上的FTX Accounts Drainer 2账户上,约1999.4 个PAXG($3,516,404),FTX Accounts Drainer 3账户上约499 个PAXG($878,114),FTX Accounts Drainer 4账户上约499 个PAXG($878,114),其它链上的资产目前尚无异动,Beosin Trace将持续对黑地址异动进行监控。[2022/11/16 13:09:37]

在OlaVM中,RAM的所有操作组成一个独立的table,table里的内容由memory和storage两种类型组成。在这里,我们只关注对于memory的约束。

Beosin:Jumpnfinance项目发生Rugpull,涉及金额约115万美元:金色财经报道,据Beosin EagleEye平台监测显示,Jumpnfinance项目Rugpull。攻击交易为0x48333962e6e946748a26d6222db95ce97e76c9ed3917123a7c9f2731f896b72c。Beosin安全团队分析发现攻击者首先调用0xe156合约的0x6b1d9018()函数,提取了该合约中的用户资产,存放在攻击者地址上(0xd3de02b1af100217a4bc9b45d70ff2a5c1816982)。目前被盗资金中2100 BNB ($581,700)已转入Tornado.Cash,剩余部分2,058 BNB($571,128)还存放在攻击者地址,Beosin安全团队将持续跟踪。Beosin Trace将对被盗资金进行持续追踪。[2022/10/10 12:51:13]

内存的操作类型大体可以分为三类:

??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开发者会有些不友好,需要在编译器层面去消除,使得这些不友好,对开发者不可见。

所以,如果采用上述内存模型,内存模块的约束,将只剩下针对write操作的约束,即使用copyconstraints来保证写入的值是对的即可。无须约束:

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

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

??内存的初始化值为0

参考

1.ThedifferenttypesofZK-EVMs:

https://vitalik.ca/general/2022/08/04/zkevm.html

2.privacy-scaling-explorations/zkevm-specs:

https://github.com/privacy-scaling-explorations/zkevm-specs

3.PolygonzkEVMDocumentation:

https://docs.hermez.io/zkEVM/Overview/Overview/

4.OlaVM:AnEthereumcompatibleZKVM:

https://olavm.org/whitepaper/OlaVM-07-25.pdf

5.EVM:

https://ethereum.github.io/yellowpaper/paper.pdf

6.ethereum_evm_illustrated,page51:

https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf

7.EVMPlayground:

https://www.evm.codes/playground

8.OlaVM:

https://olavm.org/whitepaper/OlaVM-07-25.pdf

关于我们

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

微信公众号:Sin7y

GitHub:Sin7y

Twitter:@Sin7y_Labs

Medium:Sin7y

Mirror:Sin7y

HackMD:Sin7y

HackerNoon:Sin7y

Email:contact@sin7y.org

来源:金色财经

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

金宝趣谈

MEXC9月加息数据公布,市场整体分析_ARK:COMP

凌晨公布的9月议息会议的利率决议、有几个点值得关注下:1.本次议息会议加息75个基点,如之前所说基本上都已经pricein。但是加息幅度已经不是本次利率决议最重要的点了.

ICPWeb3 入门手册:从认知到实践_SIN:TWI

如果你也喜欢Web3,希望在这做些有趣的、有意义的事情,那么我希望这篇文章可以帮助到你。原文标题:《Web3新手教程——从入门到精通》 撰文:文心 其实在很早之前,我就计划写一篇《Web3新手教.

[0:15ms0-3:516ms