http://www.7klian.com

L2 深入领略OVM

                 _postStateRootBatchHeader,
         bytes32 _postStateRoot,
             ),
1. Optimistic Rollup vs. zk Rollup
网络上比拟这两种Rollup的方案文章不多。主要的一篇文章是:
焦点代码在contracts-v2/contracts/optimistic-ethereum/OVM目次中。除了OVM目次,iOVM目次是接口界说,libraries目次是各类库的实现,包罗编解码,二叉树等等。
     function initializeFraudVerification(
run函数提供了执行的生意业务,以及执行生意业务前的状态。
         ovmStateCommitmentChain.deleteStateBatch(
         );
本文中利用的代码的最后一个提交信息如下:
             resolve(“OVM_StateTransitionerFactory”)
                 _preStateRoot,
https://ethfans.org/posts/optimistic-vs-zk-rollup-deep-dive

 
         Lib_OVMCodec.ChainInclusionProof memory _transactionProof
             _postStateRoot != transitioner.getPostStateRoot(),
                 _preStateRootBatchHeader,
     )
     )
假如纷歧致,需要回滚世界状态:
             _postStateRootBatchHeader.batchIndex,
    deploy: use layer 2 chainid (#42)
         );
     )

Layer2的所有的生意业务信息,一个个Batch的通过CallData提交到Layer1。每个Batch中的生意业务的Hash信息组织成Merkle树。简朴的说,CanonicalTransactionChain存储的是一个个Batch生意业务的Merkle树根。这些树根用来判定某个详细的生意业务是否在链中。

         override
             “Invalid post-state root index.”

Optimistic Rollup是Layer2潜在的一种方案。周末有点时间,在网络上翻了翻。网络上的文章,Optimistic Rollup深入技能的文章不多,先容OVM底层技能细节的文章则更少。感乐趣看了看Optimism实现的OVM成果相关的智能合约,对Optimistic Rollup的领略很有辅佐。总结一下,感乐趣的小同伴可以看看。
         );
         bytes32 _preStateRoot,
先查抄提供的两个世界状态是否在StateCommitmentChain上存在:
             _preStateRoot,
             publisher,
         external
             “State transition has not been proven fraudulent.”
海内也有对应的翻译文章:

Optimism实现了EVM模仿OVM的逻辑,相关的项目标Github地点:
             _postStateRootBatchHeader
                 _preStateRoot,
                 _txChainElement,
         );
         Lib_OVMCodec.ChainBatchHeader memory _transactionBatchHeader,
         require(
         require(
                 _preStateRootProof
verification是OVM挪用的业务逻辑。在Layer1,,只是在验证的时候才需要通过OVM执行判定某个生意业务执行是否正确。verification逻辑中包罗了BondManager(抵押打点),StateTransitioner(状态转换打点)和FraudVerifier(错误状态验证逻辑)。FraudVerifier逻辑是最焦点的逻辑。整个验证进程的逻辑挪用干系如下:

Optimistic Rollup是Layer2潜在的一种方案。和zk Rollup一样,所有Transaction的信息城市作为CallData“存储”在Layer1。在Layer2, Optimistic Rollup通过OVM执行智能合约,并利用“查看”的方法确定Layer2世界状态在Layer1的正确性。Optimistic Rollup的难点也在OVM,需要在EVM的基本上模仿OVM的执行,并判定状态的正确性。今朝,Optimistic Rollup的挑战期为7天。也就是说,只有7天前的状态是“确定”的,不会回滚。

https://github.com/ethereum-optimism/contracts-v2
而且对提交世界状态的节点举办处罚:
             “Invalid transaction inclusion proof.”
         ovmBondManager.finalize(
             ovmCanonicalTransactionChain.verifyTransaction(
         address _ovmStateManager

两种方案都是Rollup,Layer2的所有Transaction的信息城市作为CallData“存储”在Layer1,而且Layer2的状态也实时同步到Layer1。两者的区别在于,Layer2的状态在Layer1的正确性担保。Optimistic Rollup回收的是“查看”的方法,任何一个节点发明Layer2的状态的错误,提交相关的证明。假如错误的状态被验证,在Layer1的Layer2的状态需要回滚,提交织误状态的节点被处罚。zk Rollup回收的方法直接了当,在向Layer1提交Layer2状态的同时,提交相关状态改变的证明。这些证明都是在Layer2生成。也就是说,zk Rollup在向Layer1提交Layer2状态的同时,同时提交了Layer2状态转换的计较证明。这个计较证明是通过零常识证明的算法发生。简朴的说,假如转换的状态巨大,生成零常识证明的时间越长。
         );
         bytes memory _bytecode
     function run(
         );
             ),
_preStateRoot是之前的世界状态的Merkle树根。通过_preStateRootBatchHeader和_preStateRootProof可以验证某个状态是在StateCommitmentChain上。
         );
2.2 OVM/execute
         require(
             ),
         returns (bool)
简朴的看,OVM在EVM的模仿,涉及到两个重要的点:1/之前世界状态的暗示 2/当前生意业务的执行。整个逻辑涉及到多次Layer1的生意业务,除此之外,还需要足够的时间担保链上数据可以或许同步并查抄。今朝,世界状态的挑战进程必需在相应生意业务后的7天内完成:
         Lib_OVMCodec.ChainBatchHeader memory _preStateRootBatchHeader,
         Lib_OVMCodec.TransactionChainElement memory _txChainElement,
ExecuteManager是整个智能合约执行情况以及指令集的处理惩罚。OVM其实和EVM逻辑上回收同样的指令集,可是在OVM的情况下,出格在Layer1的EVM执行OVM时,需要将这些指令集“转义”。之所以叫OVM的原因,大概很洪流平为了区分EVM,表述利便。蛮多指令需要转义,把OVM在Layer1的实现想象成虚拟机。这些指令包罗:TIMESTAMP,CALL,STATICCALL,DELEGATECALL,GASLIMIT,SLOAD,SSTORE等等。一个生意业务的执行从ExecuteManager的run函数开始:
     function finalizeFraudVerification(
2.3 OVM/verification
         bytes32 _preStateRoot,
     function isBytecodeSafe(
         Lib_OVMCodec.ChainInclusionProof memory _preStateRootProof,
         require(
             timestamp
         Lib_OVMCodec.Transaction memory _transaction,

_transction信息是需要验证的生意业务信息。通过_txChainElement,_transactionBatchHeader以及_transactionProof可以验证某个生意业务是否在CanonicalTransactionChain上。
             Lib_OVMCodec.hashTransaction(_transaction)
         pure

             address(libAddressManager),
在确定了生意业务以及状态都正当后,建设StateTransitioner筹备执行生意业务。
         Lib_OVMCodec.ChainInclusionProof memory _preStateRootProof,
         require(
             _preStateRootProof.index,

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