跳至主要內容

什麼是以太坊虛擬機(EVM)?

更新於
2025年11月26日

閱讀時間 5 分鐘

概覽

以太坊虛擬機(EVM)是以太坊的核心組件,有助於驅動區塊鏈和智慧合約的運作。它在協助以太坊實現用戶採用與去中心化方面至關重要。在本指南中,我們將深入探討 EVM,了解它究竟是什麼以及如何運作。接著,我們將探討幾個關鍵要點,以鞏固我們的理解。

想看影片教學嗎?跟著 Sahil 一起學習,5 分鐘內了解以太坊虛擬機(EVM)。
訂閱我們的 YouTube 頻道,觀看更多影片!

您需要準備的物品


  • 以太坊的基礎知識
  • 對資料結構與記憶體的基本理解

您將學到什麼


  • 什麼是以太坊虛擬機(EVM)
  • 以太坊虛擬機(EVM)的運作原理
  • 關於以太坊虛擬機(EVM)的重點摘要

什麼是 EVM?

以太坊虛擬機(EVM)是以太坊的運算引擎,負責管理區塊鏈的狀態,並實現智慧合約的功能。 EVM 內建於您用於在以太坊上運行節點所需的客戶端軟體(例如GethNethermind 等)之中。以太坊上的節點會保存交易資料的副本,由 EVM 進行處理以更新分散式帳本。一般而言,由於客戶端軟體已實作此功能,因此以太坊上的節點皆原生支援 EVM。

接下來,讓我們來探討 EVM 執行的一些任務。

EVM 參與區塊生成與交易執行。在區塊生成過程中,EVM 制定了用於管理各區塊之間狀態的標準。這些狀態儲存於梅克爾-帕特里夏樹(Merkle Patricia Trie)中,並作為以太坊的基準狀態。

在交易執行過程中,EVM 透過解析操作碼(低階機器指令)中的指令來執行任務(例如對智慧合約的函式呼叫);然而,資料是以位元組碼格式呈現的。 要將資料轉為字節碼,您可以使用Solidity(即智慧合約的原生程式語言)等程式語言,透過字節碼來編譯並部署智慧合約。

請注意,當 EVM 執行任務時,其執行範圍受交易所提供的 gas 數量以及 EVM 的整體限制所限。Gas 是以太坊上運算能力的計量單位。

若想進一步了解交易,請參閱我們的指南《什麼是以太坊交易?

接下來,讓我們來看看 EVM 的架構。

電子投票機(EVM)是怎麼設計的?

EVM 採用基於堆疊的記憶體結構運作,並包含記憶體儲存空間堆疊等記憶體元件(這些元件用於讀寫區塊鏈以及管理狀態)。

EVM 被視為 準圖靈完備,這意味著它能在給定一組指令與輸入的情況下解決問題,但其運算能力受限於交易中提供的 gas 數量。

現在,讓我們來探討當交易字節碼正在執行,或是正在建立新區塊時,EVM 內部是如何運作的。

EVM 是如何運作的?

在本節中,我們將探討 EVM 的運作方式。請注意,這僅是高層次的說明,並未涵蓋 EVM 的所有運作細節。

正如我們先前提到的,EVM 會執行以字節碼格式編寫的任務,並將其解譯為操作碼。接下來讓我們說明智慧合約程式碼(字節碼)是如何被分解為操作碼的。

在此範例中,我們將參考Remix.IDE 上的「簡易儲存合約」(1_Storage.sol)。該簡易儲存合約的編譯後位元組碼如下所示:

608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100d9565b60405180910390f35b610073600480360381019061006e919061009d565b61007e565b005b60008054905090565b8060008190555050565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea26469706673582212209a159a4f3847890f10bfb87871a61eba91c5dbf5ee3cf6398207e292eee22a1664736f6c63430008070033

您可以在Remix.IDE 中開啟範例1_Storage.sol合約,接著進行編譯並點擊「複製字節碼」按鈕,即可查看相同的字節碼。

請注意,EVM 僅使用 140 個唯一的操作碼;然而,總共有 256 個長度為 1 位元的操作碼。現在讓我們來看看合約中某個函式(例如store())的位元組碼。

60003560e01c80632e64cec11461003b5780636057361d1461005957

上例中的每個位元組都代表一個不同的操作碼。 例如,第一個位元組(例如 60)代表 PUSH1 指令碼,下一個位元組(例如 00)代表要推入的資料,第三個位元組(60)再次代表 PUSH1 指令碼,而下一個位元組則代表其輸入(例如 e0)。 若要查看上述函式的所有操作碼,您可以前往evm.codes/playground,將字節碼輸入 IDE 中,然後點擊「執行」(請務必在下拉式選單中選擇「字節碼」)。

既然我們已經對 EVM 如何執行字節碼有了更多了解,接下來就來探討以太坊的狀態轉換函式吧。

以太坊狀態轉換函數

Y(S、T) = S'

地點:


  • Y = 狀態轉換函數
  • S = 當前區塊鏈狀態(餘額、合約、儲存空間)
  • T = 新交易
  • S' = 交易完成後的狀態

以太坊的狀態轉換函式,是 EVM 每次執行交易時都會處理的一組公式。該函式的目的是確保交易符合交易標準,且在技術上有效(例如:nonce 正確且簽名有效)。可以將其視為一個純函式,它會接收當前的區塊鏈快照和一筆交易,然後輸出新的有效狀態。

現在您應該更清楚了解 EVM 的運作方式與設計原理了。接下來,讓我們來探討 EVM 的幾項主要優勢。

重點摘要


  • 圖靈完備:以太坊具備圖靈完備性,這使其能夠執行任意邏輯,這點與比特幣等其他區塊鏈不同。
  • 可組合性:以太坊並非唯一的 EVM 相容區塊鏈。許多第一層(L1)和第二層(L2)區塊鏈都與 EVM 相容,這使得在區塊鏈之間遷移和部署合約,或轉移代幣變得輕而易舉。例如PolygonBNB Smart ChainAvalanche 等。
  • 去中心化:EVM 讓開發者能夠在以太坊上部署 dApp(去中心化應用程式)。

其他資源

若您想更深入了解 EVM,請參考以下資源:


或者,如果您對建立自己的智慧合約感興趣,不妨參考我們的《以太坊智慧合約運作原理概覽》指南。

結語

太棒了!現在你對 EVM 的了解又多了一點。有任何想法或問題,或是想展示你學到的東西嗎?歡迎在Discord上告訴我們,或透過Twitter 聯絡我們。

我們 ❤️ 您的回饋!

如果您對這份指南有任何意見或疑問,請告訴我們。我們非常樂意聽取您的意見!

分享這份指南