本文介绍了Optimistic Virtual Machine (OVM),它是运行在Optimistic Rollup上的智能合约的执行环境。OVM与以太坊虚拟机(EVM)兼容,通过乐观执行和欺诈证明机制,实现了在Layer 2上进行通用计算,从而扩展以太坊的吞吐量和减少延迟。文章还对比了OVM与EVM、zkEVM的区别,并深入探讨了OVM的工作原理,包括执行和欺诈证明机制。
由 Alchemy 编写
由 Brady Werkheiser 审核
发布于 2022 年 7 月 1 日,阅读时间 9 分钟
Optimistic Virtual Machine (OVM) 是在 optimistic rollup 上运行智能合约的执行环境。Optimistic rollups 是一种 layer 2 (L2) 扩展解决方案,通过链下执行来帮助扩展 Ethereum 上的吞吐量和延迟。Rollup 是“混合扩展解决方案”,因为虽然它们在链下执行交易,但它们会将重建链状态所需的数据发布到 Ethereum 上。
Optimistic Virtual Machines (OVM) 对于 optimistic rollup 的功能至关重要。OVM 允许开发者在 L2 rollup 上运行去中心化应用程序 (dApps),就像在 Ethereum 上一样,而用户体验没有明显的差异。
本指南解释了 OVM 的含义以及它与其他虚拟机(如 EVM 和 zkEVM)的区别。我们还将介绍流行的 optimistic rollup(如 Optimism 和 Arbitrum)中使用的 OVM 设计的基本架构。
Optimistic Virtual Machine (OVM) 是一种与 EVM 兼容的虚拟机,用于在 layer 2 (L2) 协议上运行通用计算。
OVM “乐观地”执行交易,这意味着它不强制执行交易有效性,而是依靠 L1 链来仲裁关于状态转换正确性的争议。这些争议被称为欺诈证明 (fraud proofs)。
我们可以通过考虑其关键组成部分来解释这个定义。
Ethereum Virtual Machine (EVM) 是一台“去中心化和全球计算机”,它能够在 Ethereum 区块链上执行程序。EVM 由数千台独立的计算机(节点)组成,这些计算机提供计算资源,任何人都可以访问以在 Ethereum 网络上运行软件(例如智能合约)。
“EVM 兼容性”意味着特定系统被设计为与为 EVM 编写或编译的程序一起工作。Optimistic Virtual Machine 与 EVM 兼容,因为它支持 Ethereum Yellow Paper 中指定的 EVM 指令集(操作码)。 这允许 OVM 执行 Ethereum 智能合约,而无需对代码进行任何重大更改。
虚拟机也可以充当状态机,允许它们响应输入在各种状态之间转换。在区块链中,共识协议控制状态转换并概述指导状态转换功能的规则。例如,更新 Ethereum 状态的规则由 EVM 定义,并由网络的 proof-of-work (PoW) 共识强制执行。
OVM 依赖于“乐观执行”模型——协议在接受状态转换之前不检查状态转换是否有效。这提高了效率,因为需要就状态更新的有效性达成共识会减慢 layer 1 (L1) 区块链(如 Ethereum)上的处理速度。通过默认假设所有交易都有效,OVM 可以更快地取得进展。
但是,为了提供安全性,OVM 设计允许任何人对状态转换的有效性提出异议——L1 链充当法官。此过程依赖于“欺诈证明”,我们将在后面的部分中对此进行解释。
如果虚拟机 (VM) 支持通用计算,那么只要有正确的指令和足够的资源,它就可以执行大多数任务。 由于 OVM 可以执行任意逻辑(即,它是图灵完备的),因此开发人员可以将其应用于运行不同类型的智能合约。
此外,OVM 运行在 layer 2 区块链 上,该协议运行在基础区块链(在本例中为 Ethereum)之上。 L2 协议是父链的扩展,由 L1 区块链上的智能合约管理。 更重要的是,L1 链保证 L2 OVM 中状态转换的正确性以及执行背后的数据的可用性。
Layer 2 区块链位于现有区块链之上,旨在帮助扩展 Layer 1 链。
OVM 与 EVM 类似,因为它们都用于执行计算。但是,OVM 仅用作 EVM 的接口。
EVM 是用于在 L1 上处理交易的虚拟机,但 L1 VM 的速度很慢,因为每个计算都必须由网络中的所有节点重新执行才能被接受。它也很昂贵,因为有太多的交易需要处理,并且节点一次只能处理少量的交易。
比较在 optimistic rollup 上使用 OVM 和在 Ethereum 上使用 EVM 进行基本交易(例如发送 ETH 和交换代币)的成本。
OVM(在 L2 上运行)允许用户使用 L1 EVM,而无需直接更新后者的状态。相反,OVM“链下”执行交易(即在 L1 链之外),但使用链下数据来保证 layer 1 上会发生什么。
这是一个例子:
假设 Alice 在 optimistic rollup 上有 2 ETH,并将 1 ETH 发送给 Bob。
聚合器将交易提交到 layer 1 上的 rollup 合约,如果未受到挑战,它将作为 Ethereum 上挖掘的交易的一部分包含在内。
这样,我们就可以保证在 rollup 上向 Bob 支付 1 ETH 的交易将在主 Ethereum 链上通过共识,并作为后者状态的一部分最终确定。
这种保证源于以下事实:
OVM 使用 EVM 的规则来指导交易的执行。如果 optimistic rollup 正确执行交易,它将被 L1 接受。
聚合器在 L1 上发布交易数据,允许任何人在交易执行不正确时对其提出异议。
Bob 和 Alice 可以决定从 rollup 中提取资金或继续进行交易。
无论哪种方式,他们都将受益于 EVM,而无需在 L1 上执行任何交易。
OVM 和 EVM 之间的其他区别包括:
强制有效性
即时最终性
交易速度
OVM 不强制执行状态转换功能的有效性。例如,恶意操作员可以将 Alice 的余额转移给自己并将交易提交给 L1。如果交易未受到挑战,OVM 只需接受它即可。
相反,EVM 上的每个状态转换都必须遵循网络的共识规则才能被接受。
例如,上述情况不会遵循这些规则,因为发送者的签名密钥与其公钥不匹配(这是有效交易的标准)。
EVM 保证即时最终性。这意味着状态转换一旦在网络上被接受就是永久性的,并且不能被更改或逆转。
OVM 无法保证即时最终性,因为它不强制执行交易有效性(最终确定无效交易会损坏链)。
相反,只有在 L1 链上被接受,对 OVM 状态的更新才是最终的。
如前所述,由于设计差异,与 EVM 相比,OVM 具有更高的处理能力。单个节点(排序器)可以写入链,而无需等待其他节点的批准。
这与 EVM 不同,在 EVM 中,除非交易经过验证并被其他对等节点接受,否则节点无法写入链。这减少了 EVM 中可以处理的交易数量。
如前所述,OVM 主要关注执行,并依靠 layer 1 EVM 来强制执行状态更新的规则。因此,在 OVM 中执行的交易只是提交给 L1,而没有任何有效性证明。这提高了可扩展性,但增加了无效交易将在 L1 上最终确定的风险,尤其是在没有人对其提出异议的情况下。
zkEVM(零知识 Ethereum 虚拟机) 通过生成密码学证明来证明链下计算的正确性来解决这个问题。这为 L1 提供了对状态更新有效性的有力保证。
zkEVM 与 OVM 一样与 EVM 兼容,并且可以运行智能合约。但是,它与 OVM 在以下几个方面有所不同:
接近即时最终性
客观证明
复杂性
让我们更深入地探讨一下这些内容。
状态转换会立即最终确定,因为有效性证明已在链上验证。这消除了延迟在 L1 上最终确定 L2 交易的需要。
零知识证明 用于保证 VM 计算的正确性。这消除了对主观证明(即,等待挑战期过去)或欺诈证明来确定交易有效性的需要。
与 OVM 相比,zkEVM 更难实现,因为为多个计算步骤生成有效性证明的成本很高。OVM 不受预先验证链下计算的需求的限制,仅在必要时使用欺诈证明。这使得它们比 zkEVM 更容易实现。
zkEVM 生成有效性证明以验证程序执行的正确性。
与 EVM 类似,Optimistic Virtual Machine 用作执行计算的运行时环境。但是,OVM 还需要考虑证明计算,因为 optimistic rollup 依赖于欺诈证明来检测无效的状态转换。
OVM 提供了部署和执行合约、监控余额以及智能合约平台必须执行的其他任务的功能。OVM 接收来自 L2 链上节点发送的交易形式的输入。这些输入导致 OVM 改变其状态并产生输出,例如发出事件或处理付款。
有关 OVM 中执行的其他详细信息包括 gas、bytecode 和交易。
“Gas”是指在 EVM 中执行程序的计算资源。与 EVM 类似,OVM 使用 gas 的概念来限制每个交易的执行步骤。
交易发送者必须设置 gas 限制,以指定他们愿意在交易上花费多少 gas。这可以防止恶意交易无限期运行并消耗所有网络资源。Gas 费用还补偿 L2 节点,以提供用于执行交易的计算资源。
Bytecode 是指 Optimistic Virtual Machine (OVM) 可以解释以执行函数的低级指令。以高级 EVM 兼容语言(例如 Solidity)编写的智能合约必须在部署前 编译为 bytecode。bytecode 本身作为一系列操作码执行,这些操作码对交易输入执行操作。
OVM 在 bytecode 级别与 EVM 兼容,但有一些差异。这意味着你可以用最少的更改在 OVM 中部署已编译的 EVM bytecode。
OVM 中的交易与 EVM 中的交易类似。交易可以由外部拥有的帐户 (EOA) 或合约帐户发起。来自 EOA 的交易可以是以下任何一种:
资产转移(例如,Alice 向 Bob 发送 5 ETH)
合约创建(例如,Bob 向网络发送交易,并将已编译的 bytecode 作为数据有效负载)
智能合约执行(例如,Alice 支付 5 个 UNI 代币)
同样,合约帐户可以与 EOA 作为接收者或另一个合约发起交易(称为“消息调用”)。合约还可以使用合约创建交易在 OVM 中创建新合约。
如前所述,OVM 依赖于欺诈证明方案来检测和逆转无效的状态转换。为了使欺诈证明起作用,OVM 的状态被哈希为 Merkle 树,其根存储在 layer 1 上的 rollup 合约中。Merkle 树和根允许节点对 OVM 状态的不同部分提出声明。
例如,在通过执行交易发起状态转换后,rollup 运营商应在提交 rollup 区块时发布新的状态根。状态根相当于说:“当执行此交易序列时,它将 VM 从旧状态(在旧状态根中引用)转换为新状态(在新状态根中引用)。”
但是,rollup 合约无法知道状态转换是否有效(系统是“乐观的”)。为了防止节点在 OVM 中执行无效的状态更新,rollup 使用欺诈证明。
欺诈证明只是一个声明,即如果正确执行交易,则会导致状态根与区块生产者计算的状态根不同。这是可能的,因为任何监控 L2 链的人都可以下载提交给 rollup 运营商的交易,使用其 rollup 状态的副本重新执行它们,并独立计算状态根。
假设 Alice 的余额在 OVM 的旧状态中为 5 ETH(由根哈希加密指纹:“0x67989898…”)。如果她转移 4 ETH,则 rollup 进入新状态(由根哈希加密指纹:“0x7879056…”)。
如果交易无效(例如,签名可能不正确),那么它_应该_恢复,这将使 VM 的状态保持不变。
但是,让我们想象一下,恶意运营商应用了无效的更新(可能将 Alice 的 ETH 转移到他们的钱包),他们可以发布新的(尽管不正确)状态根来最终确定交易。
因此,挑战者的角色是发布正确的状态根并声明 rollup 区块无效。这相当于说:“如果_正确_执行此交易,则会导致不同的状态根。”
通常有两种在基于 OVM 的 rollup 中证明欺诈的方法:重新执行交易和二分法协议。
在这里,OVM 被“容器化”在 L1 链上运行的智能合约中。智能合约充当一个沙盒环境,允许我们在 EVM _内部_重播 OVM 交易以获得正确的状态根。这是通过提供其他与上下文相关的输入(例如状态和存储)以及有争议的交易来完成的。
在前面描述的恶意运营商示例中,交易将恢复——使状态根保持原样。计算出的状态根将不可避免地与挑战者的状态根匹配,从而暴露恶意运营商并防止无效的状态转换。
该图显示了 OVM 如何重新执行交易以证明欺诈。
二分法协议是另一种欺诈证明方法,它试图最大限度地减少 L1 链在欺诈证明中所做的工作。它被称为二分法协议,因为其独特的设计:
该过程从挑战者对断言提出异议开始(rollup 区块被称为“断言”,因为它们是有争议的)。
断言者然后将有争议的断言分成两个_相等_的断言,挑战者选择他们希望挑战哪个部分。
在挑战者选择了另一个要挑战的断言后,断言者再次划分断言。
此过程一直持续到双方都对 OVM 中执行的计算的一个步骤的结果提出异议。
然后要求断言者提供一个步骤的证明,表明有争议的执行步骤是正确的。
如果断言者未能提交证明,或者 L1 合约认为证明无效,他们将输掉挑战。
与重新执行交易不同,二分法消除了在链上重新执行整个区块/交易的需要,这非常昂贵。它还避免了发布每个交易的状态根的需要,这在重新执行交易以证明欺诈时是必要的。
二分法协议在 Arbitrum 中使用,其他 optimistic rollup(例如 Optimism)计划 将二分法协议用于欺诈证明。
该图显示了 OVM 如何使用二分法来证明欺诈。
Optimistic Virtual Machine 是通过将计算转移到链下 rollup 来扩展 Ethereum 的关键。借助 OVM,开发人员可以在 L2 链上部署智能合约,而无需面对困扰 Ethereum 的高 gas 费用和缓慢的处理时间。此外,欺诈证明意味着 OVM 可以提供与 Ethereum 主网络上的 EVM 相同的安全保证。
Alchemy 支持构建利用 Optimistic Virtual Machine 的 optimistic rollup,包括 Optimism 和 Arbitrum。
注册一个 免费的 Alchemy 帐户,立即开始构建超快速、可扩展、与 EVM 兼容的 dApp。
Supercharged | Alchemy | Substack
获取免费的 Optimism RPC 和开发者工具 获取你的 API 密钥
📚 目录
分享:
\
\
Layer 2\
\
Rollup-as-a-Service Provider Comparison: How to Choose the Right RaaS Partner\
\
Explore the industry’s leading RaaS providers and factors to consider when choosing a RaaS.
\
\
Layer 2\
\
What is ZKsync Era? An Overview For Ethereum Developers\
\
Learn about ZKsync Era - the EVM-compatible ZK rollup powering Ethereum scaling.
\
\
Layer 2\
\
What are Rollups-as-a-service (RaaS)?\
\
Learn About Where Rollups as a Service Fit In The Ethereum Layer 2 Ecosystem
Alchemy 将最强大的 web3 开发者产品和工具与资源、社区和传奇的技术支持相结合。
- 原文链接: alchemy.com/overviews/op...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!