撰文:PSE Trading Analyst @cryptohawk
TL;DR
1.虛擬機器是一個軟體模擬的電腦系統,為程式提供執行環境。它可以模擬各種硬體設備,使程式在受控且相容的環境中運作。
2.以太坊虛擬機(EVM)是一種基於堆疊的虛擬機,用於執行以太坊智能合約;zkEVM 在EVM 等效/ 兼容上做了一定的zk-proof 生成效率優化;
zkVM 則捨棄EVM 等效/ 相容性,將zk 友善化的優先權提高;
privacyzkVM 則是在zkVM 上疊加了原生隱私特性;
SVM、FuelVM、MoveVM 共通性是透過平行執行追求效能極致,但在設計細節上有各自的特點;
ESCVM、BitVM 分別在ETH 和BTC 鏈上進行了一定創新性的運算層實驗,但目前環境下真實落地需求較低。
3.EVM 龐大的用戶生態決定了任何放棄它的區塊鏈網絡短期內都難以與其抗衡,因此非EVM 生態通過轉譯器/ 編譯器/ 字節碼解釋器甚至VM 兼容層引入EVM 生態用戶,利用非EVM 的虛擬機器特性建構新的生態敘事,或是一條必備的成功之路。
1.1 什麼是VM?
虛擬機器(VM)是虛擬化運算資源的建構塊,它具有與電腦幾乎相同的功能,包括運行應用程式和作業系統。虛擬機器的這個概念並不新穎,該技術被廣泛應用於眾多技術生態系統中。
在區塊鏈的背景下,虛擬機器(VM)是一種運行程式的軟體,通常被稱為執行區塊鏈智能合約的運行時環境。虛擬機器通常透過模擬不同的硬體設備來提供一個虛擬的電腦環境。不同的虛擬機器可以模擬的硬體設備有所不同,但通常包括CPU、記憶體、硬碟、網路介面等。當一筆鏈上交易提交時,虛擬機器負責處理該交易並更新受該交易執行影響的區塊鏈狀態(整個網路的當前全局狀態)。改變網路狀態的具體規則由VM 定義。處理交易時,VM 將智慧合約程式碼轉換為節點/ 驗證器硬體可以執行的格式。
VM 當中最重要的核心便是LLVM(low-level-virtual-machine),他可以看作是編譯器最重要的核心。圖中是原始EVM 的運作方案,智能合約透過LLVM IR 的中間代碼進行轉化,轉化成Bytecode。這些Bytecode 會儲存在區塊鏈上,當智慧合約被呼叫的時候,就會將Bytecode 轉換成對應的Opcode,再由EVM 和節點硬體來執行。
1.2 主流VM
1.2.1 EVM-區塊鏈VM 共一石,EVM 獨佔八斗,其餘共分兩鬥
代表項目: Optimism、Arbitrum
作為目前業界開發者&用戶活躍度最高的區塊鏈生態,以太坊虛擬機EVM 是一種基於堆疊的虛擬機,它透過模擬CPU、記憶體、記憶體和堆疊等硬體設備來提供一個虛擬的計算機環境,以此執行智能合約的指令並儲存智能合約的狀態和資料。 EVM 的指令集包括各種操作碼Opcode,例如算術操作、邏輯操作、儲存操作、跳躍操作等。
EVM 模擬的記憶體和記憶體是用於儲存智慧合約的狀態和資料的裝置。 EVM 將記憶體和記憶體視為兩個不同的區域,它可以透過讀取和寫入記憶體和記憶體來存取智慧合約的狀態和資料。
EVM 模擬的堆疊用於儲存指令的操作數和結果。 EVM 的指令集中的大多數指令都是基於堆疊的,它們從堆疊中讀取操作數並將結果推回堆疊中。
EVM 的設計過程,顯然是由下而上的,先敲定了模擬的硬體環境(堆疊、記憶體),再根據對應的環境設計了自己的一套彙編指令集(Opcode)與字節碼(Bytecode) 。以太坊社群為了EVM 執行效率設計了兩種編譯型的高階語言—Solidity 和Vyper。 Solidity 自不必強調,Vyper 是Vitalik 針對Solidity 中存在的部分缺陷進行改進後設計的EVM 高級語言,但是在社區沒有獲得很高的採用度,於是漸漸淡出歷史舞台。
1.2.2zkEVM-我全都要:相容EVM 環境+ 支援全域狀態根轉換產生zk-proof
代表專案:Taiko、Scroll、PolygonzkEVM
由於EVM 在建構時並未考慮zk-proof 計算,因此它具有對證明電路不友善的特性,特別是在特殊的操作碼、基於堆疊的架構、儲存開銷以及證明成本等方面。而zkEVM 是一種以相容zk-proof 計算的方式執行智慧合約的虛擬機,讓EVM 的執行過程可以透過zk-proof/validity-proof 來更有效率、低成本地驗證。相較於OPRollup 執行層只需照搬EVM,而建構EVM 的ZK 友善化是ZK Rollup 的額外挑戰。
ZK-rollups 不容易與以太坊虛擬機器(EVM)相容。在電路中證明通用EVM 計算比證明簡單計算(如前面描述的代幣傳輸)更困難且更耗費資源。
然而,零知識技術的進步(在新分頁中開啟)重新點燃了人們對將EVM 計算包裝在零知識證明中的興趣。這些努力旨在創建一個零知識EVM (zkEVM) 實現,可以有效驗證程式執行的正確性。 。
與EVM 一樣,zkEVM 在對某些輸入執行計算後在狀態之間轉換。不同的是,zkEVM 還創建零知識證明來驗證程式執行中每一步的正確性。有效性證明可以驗證涉及虛擬機器狀態(記憶體、堆疊、儲存)和計算本身的操作的正確性(即,該操作是否呼叫了正確的操作碼並正確執行了它們?)。
想法很美好,現實很骨感,目前Rollup 在實現ZK 友好化和EVM 兼容(甚至等效)上難以兩全,即要么盡可能完整復制以太坊L1 執行層,包括哈希、狀態樹、事務樹、預編譯等,使得以太坊L1 執行客戶端可以按原樣使用來處理Rollup 區塊;要么捨棄EVM 相容性,重新創建現有的Opcode,用於在電路中進行證明/ 驗證,從而允許執行智能合約。
1.2.3zkVM-魚和熊掌不能兼得:zk-proof 效率導向的非evm 虛擬機
代表專案:Starknet、Zksync、RISC ZERO
zkVM 捨棄了EVM 相容性,以資料證明與狀態更新為核心目標,在密碼學和高階語言之間找到了一層公約數,來為各類應用提供一個通用的框架。
Starkware 由於在整個ZK 領域起步較早,技術累積較為充分,擁有一定的技術領先。他是代表性的ZK 中心主義的技術架構,圍繞著ZK 建構了Cairo VM 和Cairo 的語言。其缺點在於Cairo 的學習成本較高。
ZKsync 的框架相容了EVM 和ZK 兩方面的特點,將Solidity 和其自主開發的電路語言Zinc 做了一個融合,在編譯器內部將兩者在IR 層面上做了統一。其優點在於編譯器核心的LLVM 可以相容於多種語言。
RISC Zero 使用RISC-V 架構建立模擬器允許程式設計師用Rust、C/C++ 和Go 等通用語言為zkVM 編寫程序,這意味著應用邏輯不需要局限於可以用Solidity 表達的內容,允許寫出與鏈無關的代碼。
1.2.4Privacy zkVM——zk 友善+ 原生隱私支援嘗試點燃生態新火花
代表項目:Aleo、Ola、PolygonMiden
區塊鏈作為一個公共帳本系統,所有交易都在鏈上進行,這意味著包含與地址或帳戶相關的資產資訊的狀態變化是公開透明的。因此,在致力於擴容解決方案之外,一些區塊鏈團隊相信下一個要實現的關鍵功能是隱私。
PrivacyzkVM 除去zk 友善支援擴容的特性外,由於其本身的程式語言原生支援的隱私特性,使其上層應用程式開發者能開出基於隱私相關的dapp,這將帶來新的應用場景和宏大敘事,例如徹底解決MEV 問題、保障使用者資料所有權等。當然,PrivacyzkVM 設計上的複雜程度需要更龐大的技術團隊實現落地,或許還需要等待幾年時間才能實現。
1.2.5SVM-退潮之後,仍有餘燼:效能設計已達極致的執行環境
代表專案:Eclipse Mainnet、Nitro、MakerDAOChain(maybe)
SVM,即Solana 虛擬機,主打高效能執行環境,智慧合約主要使用Rust 語言編寫。相較於單執行緒計算的EVM 和EOSWASM 執行環境,透過要求Solana 事務描述事務在執行時將讀取或寫入的所有狀態, SVM 實現了非重疊事務和僅讀取相同狀態的事務並發執行。
另外,為了實現快速驗證/ 廣播大量交易區塊,Solana 網路上的交易驗證過程廣泛使用了CPU 設計中常見的管線最佳化。以滿足一系列步驟處理的輸入資料流並且每個步驟都有不同的硬體負責的情況。一個典型比喻是洗衣機和烘乾機,它按順序洗滌/ 烘乾/ 折疊多批衣物。清洗必須在乾燥之前進行,乾燥之前必須進行折疊,但這三個操作中的每一個都由單獨的單元執行。
另外,SVM 是基於暫存器,並且具有比EVM 小得多的指令集,使得SVM 的執行更容易在ZK 中證明。對於樂觀Rollup,基於暫存器的設計可以更輕鬆地設定檢查點。
1.2.6FuelVM——buff 疊滿:UTXO 框架下的平行虛擬機
代表項目:Fuel
Fuel VM 是基於EVM、Solana、WASM、BTC & Cosmos 技術框架下的改良,跟EVM 相比有以下特點:
最獨特的是,Fuel 不僅類似SVM 設定存取清單(access lists),具有非重疊事務並行執行交易的能力,還採用UTXO 模型,分代幣UTXO 和合約UTXO,進一步提高了存取效率和運算吞吐量。
另外,Fuel VM 透過自己的領域特定語言Sway 和支援工具鏈Forc 提供了強大且流暢的開發人員體驗,其開發環境保留了Solidity 等智慧合約語言的優點,同時採用Rust 工俱生態系統中引入的範例。
未來Fuel VM 也將實現Sway 語言升級內容,包括字節碼大小方面的編譯器優化、Sway 將支援更多後端(EVM 後端已經在開發中)、抽象化將更加具有經濟性、更多應用程式將從Solidity/Vyper 遷移到Sway、改進編譯器層級的重入分析等。
1.2.7ESCVM-Ordinal/Smartweave 的繼承者:以太坊之上的運算層
代表專案:Ethscriptions Protocol
ESCVM,即Ethscriptions Virtual Machine,是Ethscriptions Protocol 提出的智慧合約方案。 Ethscriptions Protocol 本身是以太坊鏈上類似於BTC Ordinal 的協議,專注於探索不同於智能合約和L2 的低成本替代方案。
Ethscriptions 允許使用者以極低的成本繞過智慧合約儲存和執行,透過提前約定的協定規則,應用於Tx 中的calldata 進行計算。簡單來說,只要一筆成功的以太坊交易,其calldata 符合規定有效的數據規範&唯一&“to”地址不為0,即可認為合法創建了一個Ethscription,“from”地址為創建者,“ to”地址為擁有者。
設計之初,每個Ethscription 更偏向NFT 的形式,例如圖片NFT,直接將圖片內容透過Base64 格式寫入calldata 中:
最近比較火的eths 則是參考了brc-20 的協議規範進行創建的Ethscription:
ESC VM 引入的智能合約,被稱為「啞合約」(Dumb Contract),作為一個邏輯合約公約,但本身不以EVM 形式進行鏈上互動。另外,ESC VM 還增加了一種特殊格式“計算機命令”,使用這種格式創建的ethscriptions 會被ESC VM 識別與啞合約交互,例如Deploy – 部署啞合約,Call – 呼叫啞合約。
方案有一些局限性,一是「啞合約」的函數不是payable 的,也就是說如果你想透過啞合約來發送ETH,必須透過一個「橋合約」,而「橋合約」本身存在控制權濫用&資產盜用風險;二是生態存在准入門檻,不允許任意創建啞合約,其代碼需要透過Ethscriptions Protocol 治理提案定義。
總結下來,ESC VM 是將以太坊L1 作為資料儲存層,在此之上建立的一個計算層,透過將合約邏輯、合約呼叫、合約呼叫等資料內容放在以太坊tx 的calldata 內實現,ESC VM的全域狀態共識是ESC VM 客戶端共識,近似於Arweave 的SmartWeave 實作邏輯,只不過SmartWeave 的資料儲存層是Arweave。
1.2.8BitVM-一個有趣的研究實驗:BTC 之上的點對點執行通道
代表項目:ZeroSync
ZeroSync 創辦人Robin Linus 於10 月9 日發布了一篇白皮書“BitVM:Compute Anything On Bitcoin”,準確地說它不是一個VM,而是試圖創建一個圖靈完備的計算空間,其合約存儲在比特幣鏈上,但是合約的邏輯執行在鏈下。如果認為對方違約,己方可以在鏈上發起挑戰,如果對方無法做出正確回應,則己方可以拿走合約中的所有資金。
其優點在於,可以賦予比特幣圖靈完備性而不需要對比特幣協議進行任何修改,不需要新的操作碼,不需要軟分叉,隨時可以應用。
其缺陷也很明顯,一是只支持兩方之間的交易(一方證明、一方驗證),二是創建一個合約需要創建大量數據以及預簽署大量交易,鏈下信息存儲成本巨大。
以下是技術邏輯的簡單介紹:
點輸入承諾
點輸入承諾允許證明者為邏輯閘設定輸入值0 或1,在這個承諾裡存在兩個雜湊值H(A0)、H(A1),證明者需要揭示一個雜湊原像,例如A0,則將輸入值設為0,若揭示A1,則將輸入值設為1。
邏輯閘承諾
有了輸入值之後,透過組合比特幣的與、非等操作碼,可以在比特幣腳本中組合任意邏輯閘。
二進位電路承諾
將數以億計的邏輯閘組成一個二進位電路,就可以實現圖靈完備性。為了將這個二元電路承諾到比特幣網路中,需要將所有邏輯閘放進一個Taproot 位址的葉節點裡。
挑戰- 回應環節
只是將電路承諾在鏈上還不夠,交易雙方需要一種有效的方式來驗證合約的計算結果是否正確。在理想情況下,合約在鏈下運行,雙方都很合作且對結果無爭議則皆大歡喜。但如果交易雙方有爭議,則需要進入挑戰- 響應環節驗證計算結果,並透過比特幣腳本強制分配通道餘額。
因此,BitVM 遠非某種BitcoinRollup 或L2,不具有完整的虛擬機執行環境、全局狀態、用於發布複雜智能合約的高級語言,也無法允許任意數量的用戶輕鬆與這些合約進行交互。用個很通俗的例子來形象說明:BitVM 像是在人人可以用行動終端的時代裡,建構了一台比房間還大的巨型電腦。
1.2.9MoveVM-Facebook Web2 基因傳承下的產物
代表項目:Aptos、Sui
Move 是一種用於編寫安全智能合約的程式語言,最初由Facebook 開發,為Diem 區塊鏈提供支持,在Diem 區塊鏈項目中止後,以Aptos、Sui 為代表的項目延續了Move 語言的運用。 Move 區塊鏈最大特點是資料儲存採用全域存儲,由以帳戶位址為根的樹組成,每個位址可以儲存資源資料和模組代碼。
Move 有兩種不同類型的程式:模組和腳本。模組是定義結構類型以及對這些類型進行操作的函數的庫。結構類型定義了Move 的全域儲存模式,模組函數定義了更新儲存的規則。模組本身也儲存在全域儲存中。而腳本是可執行檔的入口點,類似於傳統語言中的main 函數,是未在全域儲存中發布的暫存程式碼片段。
總結,Move 模組類似於系統可執行檔案執行階段載入的動態庫模組,而腳本類似於主程式。使用者可以編寫自己的腳本來存取全域存儲,包括呼叫模組,而發布模組或執行腳本透過MoveVM 進行操作。
1.3生態發展趨勢
在EVM 網路效應如此強大的現在,EVM 用戶向非EVM 鏈生態遷移已成為新興區塊鏈專案的最大成長點,這將帶來更多的Dapp 可組合性,更大的連結性可能會在未來幾年引發更快的用戶成長。
1.3.1錢包前端相容
將EVM 用戶引入非EVM 鏈歷來都是一個主要障礙,但最近推出的Metamask Snap 將打破這一障礙。 EVM 用戶可以繼續使用MetaMask,無需切換錢包。由於Drift 的開源貢獻建構了出色的MetaMask Snap 實現,UX 相當於與任何EVM 鏈互動。 Eclipse 主網用戶將能夠與MetaMask 中的原生應用程式交互,或使用Solana 原生錢包(如Salmon)。
1.3.2VM 後端相容
- 1.3.2.1轉譯器/ 編譯器
代表項目:Wrap
Warp 是一個Solidity-Cairo 轉譯器,目前已經由以太坊著名基礎設施團隊Nethermind 開發完成。 Warp 可以把Solidity 程式碼轉譯為Cairo,但轉譯後的Cairo 程式往往需要修改並增添Cairo 特性(如呼叫內建函數,優化記憶體等)才能最大化執行效率。
- 1.3.2.2字節碼解釋器/VM 相容層
代表專案:Kakarot、Neon EVM
Kakarot 是一個部署在Starknet 上以Cairo 編寫的、以智能合約形式實現的EVM 字節碼解釋器,它以Cairo 智能合約的形式模擬了EVM 的堆疊、內存、執行等方面。相比起代碼轉譯,Kakarot 實現了EVM 背後Opcode 與Pre-compile 的逐條實現,並搭建了Account Registry、Blockhash Registry 等組件針對帳戶地址映射、Block 信息獲取等方面進行了額外處理,讓kakarot 擁有了更高原生的兼容性。
Neon EVM 是一種以智慧合約運作的EVM,可以部署在任何SVM 鏈上。 Eclipse 主網本身採用了SVM 作為執行環境,但透過Neon EVM 帶來了完全的EVM 相容性(包括EVM 字節碼支援和以太坊JSON-RPC),並且吞吐量比單執行緒EVM 更高。另外每個Neon EVM 實例都有自己的本地費用市場,即一個區塊高度上單合約帳戶交互相關的計算單元存在上限(區塊計算單元的1/4),因此用戶只需要在特定熱點合約交互或區塊塞滿時需要付出priority fee。在這個意義上來說,應用程式部署自己的合約即可獲得近似應用程式鏈的優勢,以此降低因某一特定合約互動tx 擁堵時對整個網路使用者體驗、安全性或流動性造成的破壞。
參考資料:
1. “Kakarot:探索Starknet 的EVM 相容之路”,by Cynic & Starknet Astro, https://www.panewslab.com/zh/articledetails/o211e2kv.html
2.“BitVM 引熱議,比特幣網路可以實現圖靈完備?”,by Haotian, https://foresightnews.pro/article/detail/44853
3. https://ethereum.org/en/developers/docs/evm/
4.“Starkware 技術架構與生態梳理”,by Maxlion, https://community.dorahacks.io/t/starkware/272
5.https://twitter.com/muneeb/status/1712461799327416491
6.“專案研究丨模組化高速執行層Fuel 研究報告”,from Web3CN, https://www.panewslab.com/zh/articledetails/10v5xkx8.html
7.https://www.fuel.network/
8.https://docs.ethscriptions.com/overview/introducing-ethscriptions
9. “Analysis of the First Critical Vulnerability of Aptos Move VM”,by Numen Cyber Labs, https://medium.com/numen-cyber-labs/analysis-of-the-first-critical-0-day-vulnerability- of-aptos-move-vm-8c1fd6c2b98e
10. https://ethereum.org/en/developers/docs/evm/
11. “What Is SVM – The Solana Virtual Machine”,by Squads, https://squads.so/blog/solana-svm-sealevel-virtual-machine
12. “Introducing Eclipse Mainnet: The Ethereum SVM L2”,by Eclipse, https://mirror.xyz/eclipsemainnet.eth/me7bXLWJDS177V6nl8j1uzF1mxpX6nbGOLNeyBAwXgs
13. https://john-hol.gitbook.io/bitvm/
14. https://bitvm.org/bitvm.pdf
15.“The different types of ZK-EVMs”,by Vitalik Buterin, https://vitalik.eth.limo/general/2022/08/04/zkevm.html
16. “Cipholio 研究報告:漫談ZkVM 的方案及未來”,by YOLO SHEN,Cipholio Ventures, https://web3caff.com/zh/archives/11666