跳至內容
0%

什麼是 optimistic virtual machine(OVM)?

Alchemy team headshot

作者 Alchemy

發布於 2022年7月1日閱讀時間 3 分鐘

樂觀虛擬機(Optimistic Virtual Machine, OVM)是在樂觀 Rollup 上執行智能合約的執行環境。樂觀 Rollups 是第二層(L2)擴容方案,透過鏈下執行來提升 Ethereum 的吞吐量並降低延遲。Rollups 之所以稱為「混合式擴容方案」,是因為雖然交易在鏈下執行,但重建鏈狀態所需的資料仍會發布至 Ethereum 上。

樂觀虛擬機(OVMs)對樂觀 Rollups 的功能運作至關重要。OVM 讓開發者能在 L2 Rollups 上執行去中心化應用程式,其使用者體驗與在 Ethereum 上執行無明顯差異。

本指南將說明 OVM 的定義,以及它與 EVM、zkEVM 等其他虛擬機的差異。我們也會介紹 Optimism 與 Arbitrum 等主流樂觀 Rollups 所採用的 OVM 基本架構。

什麼是樂觀虛擬機?

樂觀虛擬機(OVM)是一種與 EVM 相容的虛擬機,用於在第二層(L2)協定上執行通用運算。

OVM 以「樂觀」方式執行交易,意即它不會強制驗證交易的有效性,而是依賴 L1 鏈來仲裁有關狀態轉換正確性的爭議。這類爭議稱為詐欺證明(fraud proofs)。

我們可以透過拆解這個定義的關鍵組成部分來進一步理解。

EVM 相容性

Ethereum 虛擬機(EVM)是一台「去中心化且全球性的電腦」,能在 Ethereum 區塊鏈上執行程式。EVM 由數千台各自獨立的電腦(節點)組成,任何人都能存取這些運算資源,在 Ethereum 網路上執行軟體(例如智能合約)。

「EVM 相容性」指的是某個系統設計成能運作以 EVM 為目標所撰寫或編譯的程式。樂觀虛擬機與 EVM 相容,是因為它支援 Ethereum 黃皮書中所規範的 EVM 指令集(opcodes)。這使得 OVM 能在不需大幅修改程式碼的情況下執行 Ethereum 智能合約。

樂觀執行

虛擬機也可以做為狀態機運作,能依輸入在不同狀態之間轉換。在區塊鏈中,共識協定治理狀態轉換,並規範狀態轉換函式應遵循的規則。舉例來說,Ethereum 狀態更新的規則由 EVM 定義,並由網路的工作量證明(PoW)共識機制強制執行。

OVM 依賴「樂觀執行」模型——該協定在接受狀態轉換之前並不會檢查其是否有效。這能提升效率,因為在 Ethereum 這類第一層(L1)區塊鏈上,要對狀態更新的有效性達成共識會拖慢處理速度。透過預設所有交易皆為有效,OVM 能大幅加快處理進度。

然而,為了提供安全性,OVM 設計允許任何人對狀態轉換的有效性提出異議——由 L1 鏈擔任仲裁者。這個流程依賴「詐欺證明」,我們會在後續章節說明。

L2 上的通用運算

若虛擬機(VM)支援通用運算,只要給予正確的指令與足夠的資源,它就能執行大多數任務。由於 OVM 可以執行任意邏輯(即具備圖靈完備性),開發者能利用它來執行各種類型的智能合約。

此外,OVM 執行於第二層區塊鏈之上,這是一種建立在基礎區塊鏈(此處為 Ethereum)之上運作的協定。L2 協定是母鏈的延伸,並由 L1 區塊鏈上的智能合約管理。更重要的是,L1 鏈負責保證 L2 OVM 中狀態轉換的正確性,以及執行過程背後資料的可用性。

Layer 2 區塊鏈建構在現有的區塊鏈之上,用來協助 Layer 1 鏈擴容。
Layer 2 區塊鏈建構在現有的區塊鏈之上,用來協助 Layer 1 鏈擴容。

OVM 與 EVM 有何不同?

OVM 與 EVM 類似,兩者都用於執行運算。然而,OVM 實際上只是作為 EVM 的一個介面存在。

EVM 是用於在 L1 上處理交易的虛擬機,但由於每項運算都必須經過網路上所有節點重新執行才能被接受,L1 虛擬機的速度較慢。它的成本也較高,因為需要處理的交易數量龐大,而節點一次只能處理少量交易。

Network
Low Price
High Price

Optimism

$0.13

$0.20

Polygon Hermez

$0.25

Arbitrum One

$0.32

$0.44

Aztec Network

$0.80

Ethereum

$0.93

$4.67

OVM(運行於 L2)讓使用者能使用 L1 的 EVM,而無需直接更新後者的狀態。相反地,OVM 在「鏈下」(即 L1 鏈之外)執行交易,但利用鏈下資料來保證在第一層上將發生的結果。

舉個例子:

假設 Alice 在樂觀 Rollup 上持有 2 ETH,並要傳送 1 ETH 給 Bob。

聚合器(aggregator)會將此交易提交至第一層上的 Rollup 合約,若無人提出異議,該交易將被納入 Ethereum 上一筆已挖出的交易中。

如此一來,我們就保證了在 Rollup 上支付 Bob 1 ETH 的交易,將能在 Ethereum 主鏈上通過共識,並最終成為主鏈狀態的一部分。

這項保證來自以下事實:

  1. OVM 使用 EVM 的規則來指導交易的執行。如果樂觀 Rollup 正確執行了一筆交易,該交易就會被 L1 接受。
  2. 聚合器會將交易資料發布在 L1 上,讓任何人都能在交易執行錯誤時提出異議。

Bob 與 Alice 可以選擇從 Rollup 提領資金,或繼續進行交易。

無論哪種方式,他們都能在不於 L1 上執行任何交易的情況下,享有 EVM 帶來的好處。

OVM 與 EVM 之間的其他差異包括:

  • 是否強制驗證有效性
  • 即時最終性
  • 交易速度

強制驗證有效性

OVM 不會強制驗證狀態轉換函式的有效性。舉例來說,惡意的操作者可以將 Alice 的餘額轉給自己,並將該交易提交至 L1。如果該交易未受到挑戰,OVM 就會直接接受它。

相對地,EVM 上的每一次狀態轉換都必須符合網路的共識規則才會被接受。

以上述情境為例,這樣的交易並不符合這些規則,因為傳送方的簽署金鑰不會與其公鑰相符(這是有效交易的判斷標準之一)。

即時最終性

EVM 能保證即時最終性。這代表一旦某個狀態轉換被網路接受,它就是永久性的,無法被更改或還原。

OVM 無法保證即時最終性,因為它不會強制驗證交易的有效性(若將無效交易直接視為最終確定,將會破壞鏈的完整性)。

相反地,OVM 狀態的更新只有在被 L1 鏈接受後,才算真正最終確定。

交易速度

如前所述,由於設計上的差異,OVM 的處理能力高於 EVM。單一節點(定序器,sequencer)就能直接寫入鏈上資料,無需等待其他節點的批准。

這與 EVM 不同,在 EVM 中,除非交易已經過其他對等節點驗證並接受,否則節點無法寫入鏈上資料。這會降低 EVM 能處理的交易數量。

OVM 與 zkEVM 有何不同?

如前所述,OVM 主要專注於執行,並依賴第一層的 EVM 來強制執行狀態更新的相關規則。因此,在 OVM 中完成的交易只是單純地提交至 L1,並不附帶任何有效性的證明。這雖然提升了可擴展性,卻也增加了無效交易被最終確定在 L1 上的風險,尤其是在無人提出異議的情況下。

zkEVM(零知識 Ethereum 虛擬機)透過產生加密證明來解決這個問題,該證明能證實鏈下運算的正確性,為 L1 提供對狀態更新有效性的強力保證。

zkEVM 與 OVM 一樣與 EVM 相容,也能執行智能合約。不過,它在幾個方面與 OVM 有所不同:

  1. 近乎即時的最終性
  2. 客觀證明
  3. 複雜度

讓我們進一步探討這些差異。

1. 近乎即時的最終性

由於有效性證明會在鏈上完成驗證,狀態轉換能立即最終確定。這消除了在 L1 上延遲確定 L2 交易的需求。

2. 客觀證明

零知識證明用於保證虛擬機運算的正確性。這消除了對主觀證明(即等待挑戰期結束)或詐欺證明來判定交易有效性的需求。

3. 複雜度

zkEVM 比 OVM 更難實作,因為為多個運算步驟產生有效性證明的成本相當高。OVM 不需要事先驗證鏈下運算,僅在必要時才使用詐欺證明,這使得它比 zkEVM 更容易實作。

zkEVM 會產生 validity proof,用來驗證程式執行的正確性。
zkEVM 會產生 validity proof,用來驗證程式執行的正確性。

樂觀虛擬機如何運作?

與 EVM 相同,樂觀虛擬機作為執行運算的執行環境(runtime environment)。然而,OVM 還需要考量到運算的證明機制,因為樂觀 Rollups 依賴詐欺證明來偵測無效的狀態轉換。

執行

OVM 提供部署與執行合約、監控餘額,以及智能合約平台必須執行的其他功能。OVM 接收由 L2 鏈上節點所發送的交易作為輸入。這些輸入會使 OVM 改變其狀態並產生輸出,例如觸發事件或處理支付。

有關 OVM 執行的其他細節包括 gas、位元組碼(bytecode)與交易。

Gas

「Gas」指的是在 EVM 中執行程式所需的運算資源。與 EVM 相同,OVM 也使用 gas 的概念來限制每筆交易的執行步驟。

交易發送者必須設定 gas 上限,指定願意為該筆交易花費多少 gas。這能防止惡意交易無限執行並耗盡所有網路資源。gas 費用同時也是對提供運算資源以執行交易的 L2 節點的補償。

位元組碼(Bytecode)

位元組碼指的是樂觀虛擬機(OVM)能解讀以執行函式的低階指令。以高階、與 EVM 相容的語言(例如 Solidity)撰寫的智能合約,在部署前必須先編譯為位元組碼。位元組碼本身以一連串操作碼(opcodes)的形式執行,對交易輸入進行運算操作。

除了少數差異外,OVM 在位元組碼層級與 EVM 相容。這代表你只需極少的修改,就能將編譯完成的 EVM 位元組碼部署至 OVM 上。

交易

OVM 中的交易運作方式與 EVM 類似。交易可以由外部帳戶(EOA)或合約帳戶發起。來自 EOA 的交易可以是以下任一種:

  • 資產轉移(例如 Alice 傳送 5 ETH 給 Bob)
  • 合約建立(例如 Bob 向網路發送一筆以編譯完成的位元組碼作為資料負載的交易)
  • 智能合約執行(例如 Alice 支付以取得 5 個 UNI 代幣)

同樣地,合約帳戶也能發起交易(稱為「訊息呼叫」,message calls),接收方可以是 EOA 或另一個合約。合約也能透過合約建立交易,在 OVM 中建立新合約。

詐欺證明

如前所述,OVM 依賴詐欺證明機制來偵測並還原無效的狀態轉換。為使詐欺證明得以運作,OVM 的狀態會以 Merkle tree 的形式進行雜湊處理,其根雜湊值會儲存在第一層上的 Rollup 合約中。Merkle trees 與根雜湊值讓節點能對 OVM 狀態的不同部分提出聲明。

舉例來說,Rollup 操作者在執行交易並啟動狀態轉換後,必須在提交 Rollup 區塊時發布一個新的狀態根。狀態根等同於在說:「這一連串交易在執行後,會將虛擬機從舊狀態(由舊狀態根所參照)轉換為新狀態(由新狀態根所參照)。」

然而,Rollup 合約無法得知這次狀態轉換是否有效(此系統是「樂觀」的)。為防止節點在 OVM 中執行無效的狀態更新,Rollups 使用詐欺證明。

什麼是詐欺證明?

詐欺證明其實只是一項聲明:主張某筆交易若正確執行,將導致與區塊產生者所計算出的狀態根不同的結果。這之所以可行,是因為任何監控 L2 鏈的人都能下載提交給 Rollup 操作者的交易,利用自己所擁有的 Rollup 狀態副本重新執行這些交易,並自行計算出狀態根。

假設 Alice 在 OVM 的舊狀態中餘額為 5 ETH(以根雜湊值「0x67989898…」進行加密指紋標記)。若她轉出 4 ETH,Rollup 便會進入一個新狀態(以根雜湊值「0x7879056…」進行加密指紋標記)。

如果這筆交易無效(例如簽章不正確),那麼它應該要被還原(revert),使虛擬機的狀態維持不變。

然而,假設有一名惡意操作者套用了這筆無效更新(也許是將 Alice 的 ETH 轉入自己的錢包),他們仍可以發布這個雖然錯誤、但看似新的狀態根,以完成該交易的最終確定。

因此,挑戰者的角色就是發布正確的狀態根,並宣告該 Rollup 區塊無效。這等同於在說:「這筆交易若正確執行,會導致不同的狀態根。」

在以 OVM 為基礎的 Rollups 中,證明詐欺有哪兩種方式?

在以 OVM 為基礎的 Rollups 中,證明詐欺通常有兩種方法:重新執行交易,以及二分法協定(bisection protocol)。

1. 重新執行交易

在此方法中,OVM 被「容器化」在運行於 L1 鏈上的智能合約中。該智能合約作為一個沙盒環境,讓我們能在 EVM 內重播一筆 OVM 交易,以取得正確的狀態根。做法是提供其他與情境相關的輸入,例如狀態與儲存資料,以及有爭議的交易本身。

以前面所述的惡意操作者為例,該交易將會被還原——使狀態根維持原樣。計算出來的狀態根最終必然會與挑戰者的狀態根相符,藉此揭露該惡意操作者,並阻止無效的狀態轉換發生。

此圖說明 OVM 如何透過重新執行交易來證明詐欺行為。
Source: https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/#disputing-transactions
2. 二分法協定

二分法協定是另一種進行詐欺證明的方法,目的在於盡量減少 L1 鏈在詐欺證明過程中需要負擔的工作量。之所以稱為二分法協定,是因為其獨特的設計方式:

  1. 流程始於挑戰者對某項斷言(assertion)提出異議(Rollup 區塊被稱為「斷言」,因為它們是可被爭議的)。
  2. 提出斷言者接著將受爭議的斷言分為兩個相等的斷言,由挑戰者選擇要對哪一部分提出異議。
  3. 挑戰者選定另一項斷言提出異議後,提出斷言者會再次將該斷言進行拆分。
  4. 這個流程會持續進行,直到雙方對 OVM 中單一運算步驟的結果產生爭議為止。
  5. 此時,提出斷言者必須提供一個單步證明,證明該爭議步驟的執行結果正確無誤。
  6. 若提出斷言者未能提交該證明,或是 L1 合約認定該證明無效,則其將輸掉此次挑戰。

與重新執行交易的方式不同,二分法無需在鏈上重新執行整個區塊或交易,因而省去了高昂的成本。同時,它也不需要為每一筆交易發布狀態根,而這在透過重新執行交易來證明詐欺時是必要的。

二分法協定目前用於 Arbitrum,而其他樂觀 Rollups,例如 Optimism,也計畫採用二分法協定來進行詐欺證明

此圖說明 OVM 如何透過 bisection 來證明詐欺行為。
此圖說明 OVM 如何透過 bisection 來證明詐欺行為。

結語

樂觀虛擬機透過將運算移至 Rollups 進行鏈下處理,對於擴展 Ethereum 的規模至關重要。有了 OVM,開發者能在 L2 鏈上部署智能合約,而不必面對 Ethereum 常見的高昂 gas 費用與緩慢處理速度等問題。此外,詐欺證明機制使 OVM 能提供與 Ethereum 主網上 EVM 相同等級的安全性保證。

Alchemy 支援在採用樂觀虛擬機的樂觀 Rollups 上進行開發,包括 OptimismArbitrum

立即註冊免費的 Alchemy 帳戶,開始打造速度極快、可擴展且與 EVM 相容的應用程式。

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。