织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

硬核 | 深入理解 Optimistic Rollup 执行环境 OVM (2)

时间:2020-11-05 12:09来源:未知 作者:admin 点击:
Optimism 实现了 EVM 模拟 OVM 的逻辑,相关的项目的 Github 地址。 本文中使用的代码的最后一个提交信息如下: commit ca1fede6c8cb9e4eacd8205c1d53284d0c8debdc Author: M

硬核 | 深入理解 Optimistic Rollup 执行环境 OVM

Optimism 实现了 EVM 模拟 OVM 的逻辑,相关的项目的 Github 地址。

本文中使用的代码的最后一个提交信息如下:

commit ca1fede6c8cb9e4eacd8205c1d53284d0c8debdc Author: Mark Tyneway Date: Fri Oct 30 12:14:50 2020 -0700 deploy: use layer 2 chainid (#42)

核心代码在 contracts-v2/contracts/optimistic-ethereum/OVM 目录中。除了 OVM 目录,iOVM 目录是接口定义,libraries 目录是各种库的实现,包括编解码,二叉树等等。

OVM/chain

Layer 1 的智能合约中用两条链维护交易信息和状态信息,分别是 CanonicalTransactionChain 和 StateCommitmentChain。

硬核 | 深入理解 Optimistic Rollup 执行环境 OVM

Layer 2 的所有的交易信息,一个个 Batch 的通过 CallData 提交到 Layer 1。每个 Batch 中的交易的 Hash 信息组织成 Merkle 树。简单的说,CanonicalTransactionChain 存储的是一个个 Batch 交易的 Merkle 树根。这些树根用来判断某个具体的交易是否在链中。

硬核 | 深入理解 Optimistic Rollup 执行环境 OVM

Layer 2 的世界状态,通过一个个交易的状态改变来表示。每个交易后的状态也是通过一个个 Batch 提交到 Layer 1。每个 Batch 中的状态,也再次组织成 Merkle 树。这些树根用来判断某个状态是否在链中。

具体两条链的存储信息,可以查看源代码:OVM_CanonicalTransactionChain.sol 和 OVM_StateCommitmentChain.sol。

OVM/execute

execute 是 OVM 在 EVM 执行的核心逻辑,包括 ExecuteManagerStateManager 以及 SafetyChecker。对应的源代码分别是:OVM_ExecutionManager.sol,OVM_SafetyChecker.sol 和 OVM_StateManager.sol。

ExecuteManager 是整个智能合约执行环境以及指令集的处理。OVM 其实和 EVM 逻辑上采用同样的指令集,但是在 OVM 的环境下,特别在 Layer 1 的 EVM 执行 OVM 时,需要将这些指令集「转义」。之所以叫 OVM 的原因,可能很大程度为了区分 EVM,表述方便。蛮多指令需要转义,把 OVM 在 Layer 1 的实现想象成虚拟机。这些指令包括:TIMESTAMP,CALL,STATICCALL,DELEGATECALL,GASLIMIT,SLOAD,SSTORE 等等。一个交易的执行从 ExecuteManager 的 run 函数开始:

function run( Lib_OVMCodec.Transaction memory_transaction, address_ovmStateManager )

run 函数提供了执行的交易,以及执行交易前的状态。

StateManager 实现了智能合约以及账户的存储状态管理。ExecuteManager 在执行一个交易时会通过 StateManager 更新状态。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容