以太坊虛擬機

EVM 與 WASM 之比較

這是一個由來已久的問題:EVM 是不是正確的執行引擎,抑或 WebAssembly(WASM)會是智能合約更好的基礎。EVM 是一台量身打造、專為區塊鏈而設的虛擬機:一台 256 位元的堆疊機,配有一套小而精心計量、為確定性與密碼學工作而設計的指令集。WASM 則是主流、業界標準的位元組碼格式,早已在每個網頁瀏覽器中執行,可由 C、C++、Rust、Go 等語言編譯而來,並以近乎原生的速度執行。

EVM 的設計對區塊鏈有實實在在的優點。它的 256 位元字自然對應到雜湊與金鑰;它的指令集小巧且完整規範,使跨用戶端的一致實作易於處理;它的語意天生確定,沒有浮點數或其他平台相依的分歧來源。代價同樣真切:256 位元算術在 64 位元硬體上模擬起來很慢,EVM 是被解讀而非原生執行的,其工具鏈相對小眾(Solidity、Vyper),分析生態也得從零打造。

eWASM(「以太坊風味的 WASM」)是把 EVM 換成 WebAssembly 一個受限、確定性子集的提案——剝除浮點數及其他非確定性特性,並加上計量。它所承諾的回報是更快的執行、能用成熟工具與既有語言撰寫合約,以及與一個廣受支援的標準匯流。eWASM 在早期的以太坊 2.0 路線圖中曾佔重要位置,但最終被擱置;計量的實務難度、EVM 已累積的成熟度,以及 zkEVM 的興起(它需要一個穩定的 EVM 目標),都不利於一次性的全盤切換。

如今的圖景是多元並存,而非單一贏家。以太坊 L1 保留 EVM,並透過 EVM 物件格式(EOF)逐步現代化它,而非全盤替換;而 WASM 式的執行在別處蓬勃發展——Polkadot/Substrate、NEAR、CosmWasm 原生採用 WASM,Arbitrum Stylus 則在 EVM 旁疊上一台 WASM 虛擬機,讓開發者能在 Solidity 之外選用 Rust 或 C。其教訓是:EVM 對 WASM 與其說是一場要分勝負的競賽,不如說是區塊鏈原生確定性與通用效能及工具之間的權衡。

一個常見的混淆是以為 zkEVM 讓 eWASM 變得多餘。兩者其實正交:zkEVM 用零知識證明來證明 EVM 的執行,這反而提高了「保留一個穩定的 EVM 目標」而非把它換成 WASM 的價值。

又稱
eWASMEthereum-flavored WebAssembly以太坊風味 WebAssembly