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逻辑是最焦点的逻辑。整个验证进程的逻辑挪用干系如下:
而且对提交世界状态的节点举办处罚:
“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,
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。