以太坊虛擬機(Ethereum Virtual Machine,EVM)是以太坊用來執行智慧合約程式碼的運算環境。每個以太坊節點都會運行自己的 EVM 副本,並且以相同的方式處理相同的交易,因此整個網路能對單一共享狀態達成共識:包括每個帳戶的餘額,以及每個合約儲存的資料。
免責聲明:本指南僅供教育用途,不構成財務建議或招攬,亦不適用於英國讀者。以太坊、與 EVM 相容的網路,以及建構於其上的應用程式均存在風險,並不適合所有使用者。
以太坊虛擬機的功能 以太坊的基礎網路會追蹤網路上每個地址所持有的數位資產(包括以太幣 及其他資產),同時也會追蹤稱為智慧合約 的程式及其資料。EVM 就是以太坊中負責執行這些程式的部分。
當交易呼叫智慧合約時,每個以太坊節點都會將該合約的程式碼載入自己的 EVM,以交易的輸入內容執行,並根據結果更新狀態。由於 EVM 具有確定性,相同的輸入在每個節點上一律會產生相同的輸出。這使得成千上萬個獨立節點無需彼此信任,也能對結果達成共識。
EVM 常被形容為「世界電腦」,但更貼切的說法是,它是一台緩慢的共享電腦:每個步驟都需要支付 gas,而且任何人都能驗證結果。以太坊的設計以速度換取保障,確保沒有任何單一方能夠控制結果。
EVM 如何執行程式碼 開發者使用程式語言(通常是 Solidity 或 Vyper)來撰寫智慧合約。在部署之前,編譯器會將程式碼轉換為位元組碼(bytecode) ,這是一份 EVM 能夠理解、由基本指令組成的精簡清單。
每個指令稱為一個操作碼(opcode) ,例如用於加法的 ADD、用於將數值儲存到 storage 的 SSTORE,或用於呼叫其他合約的 CALL。EVM 會逐一處理操作碼,並使用:
堆疊(stack) :用於存放運算過程中的暫時數值。
記憶體(memory) :用於存放僅在當前呼叫期間需要的資料,呼叫結束後即清除。
儲存空間(storage) :用於存放在多筆交易之間持續保存於區塊鏈上的資料,例如代幣餘額。
Calldata :用於存放隨交易傳送的輸入內容。
儲存空間是成本最高的資源,因為每個節點都必須無限期保存這些資料。
為什麼 EVM 需要 gas(又稱網路費用) 任何能執行各種程式的電腦,也可能被餵入一個永遠不會停止的程式。在共享網路上,一個無限迴圈就可能讓所有節點停擺。EVM 透過 gas 費用(又稱網路費用)來防止這種情況。
每個操作碼都有對應的 gas 成本。有些是固定的,例如 ADD 需要 3 gas ;有些則取決於所涉及的工作量,例如首次寫入儲存空間需要 20,000 gas 或更多。發送者會為每筆交易設定 gas 上限(通常透過其錢包設定),自 2025 年 12 月的 Fusaka 升級起,每筆交易上限為 16,777,216 gas 。若 gas 用盡,EVM 會停止執行並還原所有變更,而發送者仍須支付已使用的 gas。
每個區塊也有 gas 總上限,用來限制網路在每個區塊中處理的運算量。在以太坊主網上,自 2025 年 12 月起,該上限為 6,000 萬 gas ,高於 2025 年初的 3,000 萬。
Gas 衡量的是工作量,而以太坊的手續費市場則決定使用者為這些工作量支付多少費用。若想了解費用如何定價,請參閱以太坊 gas 費用說明 。
EVM 相容性是什麼意思 與 EVM 相容的區塊鏈網路使用與以太坊相同的指令集,因此為以太坊撰寫的合約只需極少修改(甚至無需修改)即可部署到該網路。以太坊錢包、開發工具和地址的運作方式也相同。同一個 0x 地址,由同一組私密金鑰控制,即可在所有 EVM 網路上使用,這也是 MetaMask 在其支援的所有 EVM 網路上都顯示同一個地址的原因。
正因為有這項共通標準,加密貨幣領域中才有這麼多專案運行在 EVM 鏈上:
以太坊 Layer 2 網路 ,例如 Arbitrum、OP Mainnet、Base、Linea 和 ZKsync,運行與 EVM 相容的環境,並回到以太坊上進行結算。
BNB Smart Chain、Avalanche C-Chain、Polygon PoS、Sei 和 Monad 等網路擁有自己的驗證者與共識機制,但使用 EVM 來執行合約。
有些網路完全符合以太坊的行為(「EVM 等效」),也有些網路支援大多數合約,但在某些操作碼、gas 成本或預編譯合約(precompile)上有所不同。開發者在不同 EVM 鏈之間遷移合約時,仍需在每條鏈上進行測試。
不使用 EVM 的區塊鏈 並非所有智慧合約平台都使用 EVM。例如,Solana 透過自己的執行環境運行主要以 Rust 撰寫的程式,並設計為可平行處理大量交易。其他網路,包括 Sui、Aptos 和 Cardano,則使用各自的虛擬機與程式語言。為這些網路開發的應用程式無法在 EVM 鏈上運行,使用者需要透過跨鏈橋在它們之間轉移代幣。
2026 年 EVM 的變化 以太坊核心開發者透過網路升級來變更 EVM。近期及規劃中的變更重點在於讓每個區塊能執行更多運算:
提高 gas 費用上限。驗證者在 2025 年期間將區塊 gas 上限從 3,000 萬提高到 6,000 萬,使每個區塊能容納更多交易。Glamsterdam 新增了後續進一步提高上限的預定路徑;Sepolia 測試網目前已以 2 億的上限運行。
Glamsterdam。下一次升級包含每個區塊的存取清單(EIP-7928) ,會預先告知節點某個區塊會涉及哪些帳戶與儲存內容,使交易得以平行處理,此外還包括 gas 成本重新定價。截至 2026 年 10 月 29 日,該升級已在 Sepolia 測試網上線。以太坊基金會宣布,以太坊核心開發者為了研究其中一項 gas 定價變更,已將原定 10 月 26 日在 Hoodi 測試網的啟用時間延後 ,目前尚未確定主網上線日期。
錢包如何跨 EVM 網路運作 為 Ethereum 打造的自我託管錢包,可以在 Ethereum、其 layer 2 以及 EVM layer 1 上使用同一個帳戶(相同的 0x 地址和私密金鑰),無需為每個網路另外建立新帳戶。這是因為 EVM 相容網路共用同一種帳戶格式。要切換網路,錢包只需要各網路的連線資訊:鏈 ID(chain ID)和 RPC 端點(RPC endpoint,即錢包所連線的節點位址)。許多自我託管錢包(包括 MetaMask )也支援 Bitcoin 和 Solana 等非 EVM 網路,只要在同一個應用程式中,依各網路的格式分別管理不同的地址即可。
EVM 網路常見問題 不是。EVM 本身並不是區塊鏈,而是在每個以太坊節點內運行的執行環境。以太坊區塊鏈是區塊與交易的紀錄;EVM 則負責處理這些交易中的智能合約程式碼。
相容 EVM 的網路可以執行為 Ethereum 所撰寫的智慧合約,並使用相同的指令集、地址格式和開發工具。智慧合約與 Ethereum 錢包通常只需少量調整,甚至無須任何修改,就能在這些網路上通用。
EVM 執行的是 bytecode,由稱為 opcode 的基本指令組成。開發者通常使用 Solidity 或 Vyper 撰寫合約,並在部署前將其編譯為 bytecode。
不相容。Solana 使用自己的執行環境(runtime),程式主要以 Rust 撰寫。雖然有些專案提供在 Solana 上運行的 EVM 環境,但 Solana 主網並不相容 EVM。
每項 EVM 操作都會消耗 gas(也就是網路手續費),因此需要更多運算處理的交易會消耗更多 gas。一筆單純的 ETH 轉帳會消耗 21,000 gas,而將新資料寫入儲存空間或呼叫多個合約,則會消耗多得多的 gas。這些 gas 實際需要多少網路手續費,取決於區塊空間的需求量;請參閱「以太坊 gas 費用詳解」 。