当前位置:首页区块链核心|深入了解最佳汇总执行环境OVM

核心|深入了解最佳汇总执行环境OVM

**上卷的难点是OVM,它需要在EVM的基础上模拟OVM的实现,并判断状态的正确性。

标题:L2-深入了解OVM a632:star Li

**汇总是第2层的一个潜在解决方案。周末的时候,我上网。互联网上的文章很少,关于**汇总的深层技术的文章也很少,关于OVM细节的文章也很少。有兴趣研究由Optimi实现的与OVM函数相关的智能契约,有助于理解优化汇总。综上所述,感兴趣的合作伙伴可以看到。

乐观汇总vs.ZK汇总

在网络上很少有文章比较这两种汇总方案。

主要文章:

https://medium.com/matter-labs/optimistic-vs-zk-rollup-deep-pe-ea141e71e075

对应翻译文章:

https://www.chainnews.com/articles/932935429481.htm

对于具体的性能和安全性比较,感兴趣的合作伙伴可以直接阅读本文。个人认为,由于方案还不够成熟,目前方案所能实现的TPS只是理论上的价值。没有必要太多的讨论。主要内容是讨论这两种汇总技术的区别

核心|深入了解最佳汇总执行环境OVM

两个方案都是汇总的。Layer2的所有事务信息作为calldata存储在第一层,Layer2的状态会及时同步到第一层。两者之间的区别在于,第1层的状态保证是正确的。优化汇总采用“检察”方法。任何节点发现Layer2状态错误并提交相关证明。如果验证了错误状态,则需要回滚第1层中第2层的状态,并惩罚提交错误状态的节点。ZK rollup采用直接方式将第2层状态提交给第1层,并提交相关状态变化的证明。这些证书在Layer2生成。也就是说,ZK rollup将第2层状态提交给第1层,同时提交第2层状态转换的计算证明。该证明由零知识证明算法生成。简而言之,如果变换的状态很复杂,生成零知识证明的时间越长。

目前,ZK-rollup只支持简单的账户系统和世界状态,不能支持智能合约等复杂的世界状态。虽然**汇总可以支持智能合约,但事实上,第1层算力较弱,对智能合约的支持有限。与EVM类似,**上卷支持的智能合约实现环境称为OVM(optimal virtual machine)。

卵母细胞

OVM-乐观虚拟机。OVM是Layer2事务的执行环境。由于提交给第1层的状态需要验证正确性,所以第1层需要重放第2层的事务,即在某些情况下,第1层需要执行OVM事务。优化汇总最复杂的部分是它用EVM模拟OVM并执行第2层事务。

核心|深入了解最佳汇总执行环境OVM1

Optimi实现了OVM逻辑的EVM模拟,以及相关项目的GitHub地址。

本文中使用的代码的**一次提交如下:

提交ca1fede6c8cb9e4eacd8205c1d53284d0c8debdc作者:Mark Tyneway日期:10月30日星期五12:14:50 2020-0700部署:使用第2层链ID(#42)

核心代码位于contracts-v2/contracts/optimal ETHereum/OVM目录中。除了OVM目录外,iovm目录是接口定义,libraries目录是各种库的实现,包括codec、二进制树等。

OVM/链

在第1层智能合约中,使用两条链来维护事务信息和状态信息,即规范事务链和状态承诺链。

核心|深入了解最佳汇总执行环境OVM2

Layer2的所有事务信息通过calldata逐个提交到第一层。每个批中事务的哈希信息被组织成一个Merkle树。简而言之,规范事务链存储批处理事务的Merkle树根。这些根用于确定特定事务是否在链中。

核心|深入了解最佳汇总执行环境OVM3

Layer2的世界状态由每个事务的状态变化来表示。每个事务处理后的状态也通过批处理提交到第一层。每一批中的状态也被重新组织成Merkle树。这些树根用于确定状态是否在链中。

关于这两条链的存储信息,可以查看源代码:OVM_ucanonicalTransactionChain.SOL还有奥文状态承诺链.SOL。

OVM/执行

Execute是EVM中OVM的核心逻辑,包括executemanager、statemanager和safetychecker。对应的源代码是:OVMu执行管理器.SOL,奥维姆安全检查器.SOL还有奥文状态管理器.SOL。

Executemanager是整个智能合约执行环境和指令集的处理。实际上,OVM和EVM在逻辑上使用相同的指令集,但是在OVM环境中,特别是当第一层的EVM执行OVM时,这些指令集需要被“转义”。之所以称之为OVM,可能是因为它便于区分EVM。许多指令需要转义。把第一层的OVM实现想象成一个虚拟机。这些指令包括:timestamp、call、staticcall、delegatecall、gaslimit、load、sstore等。事务的执行从executemanager的run函数开始

函数运行(LibOVMCodec.事务处理内存事务,地址 ovmStateManager)

run函数提供执行的事务和执行事务之前的状态。

Statemanager实现智能合约和账户的存储状态管理。执行事务时,Executemanager通过statemanager更新状态。

safetychecker检查OVM的指令契约中的指令集是否正常,是否超出当前可执行范围。安全检查通过安全检查器.SOLIytecodesafe函数实现。

函数iytecodeSafe(字节内存字节码)重写外部纯返回(bool){

OVM/验证

验证是OVM调用的业务逻辑。在第1层中,只有在验证时才需要执行OVM来判断事务是否正确执行。验证逻辑包括债券管理器(抵押管理)、状态转换器(状态转换管理)和欺诈验证器(错误状态验证逻辑)。欺诈验证逻辑是核心逻辑。整个验证过程的逻辑调用关系如下:

核心|深入了解最佳汇总执行环境OVM4

通过调用initializefraudverification函数,层1开始验证执行后事务的状态是否正确。Statetransitioner准备事务之前的世界状态和事务执行的中间状态存储。在世界状态就绪(provecontractstate/provestoragesLoot)之后,事务将被执行,并通过调用executionmanager的run函数更新状态。更新后的状态通过statetransitioner的completeTransition函数生成世界状态。生成的世界状态与提交的世界状态进行比较。如果不一致,将通过bondmanager惩罚之前提交世界状态的节点。

本文详细分析了验证和细分功能。从initializefraudverification函数开始

函数initializeFraudVerificationOVMCodec.ChainBatchHeader内存PRESTATEROOTBATCHEADER,LibOVMCodec.ChainInclusionProof内存预保护,LibOVMCodec.事务处理内存事务,LibOVMCodec.TransactionChainElement内存txChainElement,LibOVMCodec.ChainBatchHeader内存transactionBatchHeader,库OVMCodec.ChainInclusionProof内存(防事务处理)

一种前物质是前世界状态的Merkle树根。通过Prestaterootbatchheader和_U的prestate根证明可以验证一个状态是否在状态承诺链上。

要求(ovm状态承诺链。验证状态承诺(preStateRoot,preStateRootBatchHeader,preStateRootProof),“无效的预状态根包含证明。”);

一种交易信息是需要验证的交易信息。通过_xChaineElement、Transactionbatchheader和_uTransaction-proof可以验证事务是否在规范事务链上。

要求(ovmCanoniCaltTransactionChain.verifyTransaction(transaction,xChaineElement,transactionBatchHeader,transactionProof),“无效的事务包含证明。”);

在确认事务和状态合法之后,创建statetransitioner来执行事务。

transitioners[preStateRoot]=iOVM_StateTransitionerFactory(reSOLve(“OVM_ustateTransitionerFactory”)).create(地址(libAddresanager),预应力防护指数,预处理,库OVMCodec.hashTransaction(交易) );

事务逻辑被直接忽略。感兴趣的合作伙伴可以查看OVM状态传递器.SOL的apptransaction函数。事务执行后,finalizefraudverification函数用于检查执行后世界状态的结果。

函数finalizeFraudVerificationOVMCodec.ChainBatchHeader内存PRESTATEROOTBATCHEADER,LibOVMCodec.ChainInclusionProof内存,字节32,postStateRoot,利布OVMCodec.ChainBatchHeader内存?postStateRootBatchHeader,库OVMCodec.ChainInclusionProof内存(postStateRootProof)

首先,检查所提供的两个世界国家是否存在于国家承诺链上:

要求(ovm状态承诺链。验证状态承诺(preStateRoot,preStateRootBatchHeader,preStateRootProof),“无效的预状态根包含证明。”);要求(ovm状态承诺链。验证状态承诺(postStateRoot,postStateRootBatchHeader,postStateRootProof),“无效的后状态根包含证明。”);

此外,这两种状态保证是连续的

需要(postStateRootProof.index= = 预应力防护指数+1,“无效的后状态根索引。”);

检查OVM执行的世界状态是否与提交状态一致:

需要(postStateRoot!= transitioner.getPostStateRoot(),“国家过渡没有被证明是欺诈性的。”);

如果不一致,则需要回滚世界状态:

卵母细胞StateCommittionChain.deleteStateBatch(postStateRootBatchHeader);

提交世界状态的节点将受到惩罚

ovmBondManager.finalize(前脚掌,后脚StateRootBatchHeader.batchIndex,发布者,时间戳);

简言之,EVM中OVM的模拟涉及到两个重要方面:1/前一世界状态的表示和2/当前事务的执行。整个逻辑涉及多个第1层事务。此外,它还需要足够的时间来确保链上的数据可以同步和检查。目前,《世界状况》的质询程序必须在相应交易完成后7天内完成:

///争议期uint256公共常数disputePeriodSeconds=7天;

总结

**汇总是第2层的一个潜在解决方案。与ZK rollup一样,所有事务信息都作为calldata“存储”在第1层中。在Layer2,**上卷通过OVM执行智能合约,并使用“检查”方法来确定第一层Layer2世界状态的正确性。**上卷的难点也在于OVM。在EVM的基础上模拟OVM的执行,判断状态的正确性。目前,**汇总的挑战期是7天。换言之,只有7天前的状态是“已确认”,不会回滚。

温馨提示:

文章标题:核心|深入了解最佳汇总执行环境OVM

文章链接:https://www.btchangqing.cn/136951.html

更新时间:2020年11月05日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

区块链

欢迎IPFs生态繁荣,未来从未如此光明!

2020-11-5 16:54:48

区块链

以太坊2.0押金合同来了。请保留此验证节点安装指南

2020-11-5 17:26:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索