http://www.7klian.com

干货 | 深入领略 OVM:在Rollup侧链上实现对智能合约的完全支持

OVM 可以或许办理问题的最重要原因是,它引入了一个全新的智能合约(Execution Manager,执行打点器)—— 作为 OVM 智能合约的虚拟容器。执行打点器会虚拟化所有大概导致 L1、L2 呈现差异功效的执行,包罗:
智能合约存储内容
生意业务内容 —— 如区块高度、时间戳、tx.origin (Solidity 的一个全局变量,它遍历整个挪用栈并返回最初发送挪用(或事务)的帐户的地点),等等。
跨合约信息的路由

根基上,对付大概导致 L1 、 L2 呈现差异功效的 EVM 成果, 执行打点器都提供了担保其功效一致的函数。

原文链接:

https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52

虽然我们还需要稍微修改上面的合约,才气真正挪用 timestamp 容器而不是拿到错误的 block.timestamp。

如此一来,我们就可以或许在验证 fraud proof 的时候,配置 L1 容器中的 “虚拟区块高度”,来担保正确的返回值!

– 在 L1 上执行 L2 transaction —— 这是个很天真的步伐。-

 

– 差异的链,,差异的功效 –

抱负环境下我们不需要在主链上执行 transaction,这也是为什么乐观性执行能很洪流平上提高链的吞吐量。然而思量到安详性,一旦呈现错误的环境(如上图 tx2),我们也需要有 transaction 回溯机制!

这就是 ” EVM 中的 EVM ” —— OVM 的焦点观念:虚拟化所有大概在差异链上返回差异功效的 EVM 组件。详细点来说,约有 15 条以太坊指令需要被虚拟化,你可以从以下进口查察真正的执行打点器长啥样。

什么是 OVM ?

所以,OVM 是怎么办到的?OVM 实现起来为什么这么坚苦?让我们一探毕竟!

固然我们办理了功效差别性的问题,但这只浸染于该智能合约罢了。因此,为了保障 L2 的安详性,我们需要确保 L2 上的所有合约都利用了 timestamp 容器,没有错误利用 block.timestamp 的漏网之智能合约。

EVM 的焦点界说了一组计较机指令,以及界说了在 transaction 中每个指令对应地该执行什么。智能合约就像是个庞大又丑恶的指令荟萃——举个简朴的例子,下图是 Solidity 的 SafeMath.sol 库在陈设之前的部门编译:

contract TimeShifter { function getShiftedTime() returns(uint) { return block.timestamp + 42; }}

(在错误性挑战中)把这个合约从头陈设到 L1 上之后,还能返回沟通的值吗?

然而不能这样做,因为:差异的链,差异的功效

 

为什么很难构建 EVM 中的 EVM

– 乐观性执行具备很好的扩展性,因为 L2 的 transaction 可以在 L1 重放(假如有需要的话!) –

总的来说,其实我们需要的是 Unipig 编码实现 execute_EVM_tx() —— 一个可以或许让我们在 L1 transaction 中,嵌套执行任何故太坊 L2 transaction 的函数(以实现 fraud proof “错误性证明” 成果)。可是抱负很饱满,现实很骨感,要让以太坊 transaction 嵌套执行原来就很是坚苦,更况且有些 L2 transaction 基础不适合 L1 !

问题描写:EVM 中的 EVM

安详性:容器纯度查抄

办理之道:OVM

展望

 

假如你深入思考,你会发明这个问题险些会产生在所有智能合约上。好比对付某个 ERC 20 智能合约来说,你将合约重陈设在 L1 上之后,你要怎么配置 L2 上的余额呢?诸如此类,不计其数。

 

 

翻译&校对: IAN LIU & 阿剑

 

– 新的 TimeShifter 函数,利用 TimestampManager 作为容器。-

但对付其他智能合约来说,工作就变得巨大了。举个简朴的例子,下面的智能合约执行后会返回“当前的以太坊(区块)的时间戳 + 42”:

我们认为 OVM 的呈现代表着以太坊 L2 的奔腾,因为它差异于变着招 利用 以太坊,它就是以太坊自己的进步。只要加上几行代码,就可以或许实现快速且低本钱的 Solidity 智能合约迁移,这也是当前关于以太坊扩展方面最令我们欢快的 topic 。假如你想要自行体验一把,可以存眷我们最近的 OVM 测试——在尺度的以太坊东西中(如 Graph 和 Burner 钱包),及时运行部门的 Synthetix 巨大生意业务合约(见此处)。(完)

举例来说,我们结构一个容器来办理上述提到的时间戳纷歧致的问题:

要让智能合约只通过执行打点器来挪用某些指令,尚有一个问题就是开拓体验 —— 假如开拓者需要遍历整份智能合约,然后把所有 block.timestamp 替换为 getOvmTimestamp(),这种艰辛不奉迎的活必定没人愿意做。

有了 OVM 后,将 dApp 移植到 L2 不再是架构级此外大工程,只剩下简化的陈设操纵。虽然,dApp 的构建仍然要思量紧耦合( tight coupling )及可组合性( composability ),但只要你需要,新的智能合约随时可以或许陈设到利用 OVM 的链上。换言之,在 L2 打造钱币乐高( money lego,泛指 DeFi 产物)依然可以很是利便。

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