跳至內容
0%

什麼是 Ethereum virtual machine(EVM)?

Alchemy team headshot

作者 Alchemy

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

EVM——擁有許多名字的機器

世界電腦。無法阻擋的機器。Ethereum 的核心。Ethereum Virtual Machine(EVM)有許多名字,這凸顯了它對 Ethereum 網路的重要性。正是這項核心功能,使 Ethereum 不只是像 Bitcoin 那樣的「分散式帳本」,而是一個「分散式狀態機」。

EVM 讓開發者能用一種叫做 Solidity 的程式語言來建立智慧合約。智慧合約的一個常見應用是管理代幣的產生與交換。許多應用與協議會使用代幣來獎勵使用者執行對其目標重要的行為。若沒有 EVM,這一切都不可能實現。

為了更了解 EVM 的能力,讓我們來看看它的一些核心組成部分:

虛擬機——EVM 的平台

去中心化網路很難被摧毀。如果你想這麼做,就必須移除目前線上的每一個節點,並想辦法阻止更多節點出現。

比較中心化、去中心化與分散式網路拓撲的圖表
分散式網路

要讓去中心化網路擴展,一個好方法是使用虛擬機(VM)。這是因為 VM 可以在不同的作業系統與硬體上執行,也不受地理位置限制。VM 作為程式碼與執行程式碼的機器之間的抽象層運作。

VM 的運作方式類似於具有儲存、記憶體與 CPU 的實體機器,但它們完全以程式碼形式運作。理論上,任何人都可以執行一個 VM,這使它成為去中心化網路中高度可攜的平台。EVM 就是利用去中心化的節點網路來執行智慧合約。

智慧合約——EVM 的應用

智慧合約是能自動執行的程式碼,讓各方無需任何中央權威機構即可互相交易。智慧合約中包含一份定義好的操作清單,當鏈上或鏈下的某些條件被滿足時,這些操作就會被執行。有些操作可能是將資金轉移到某個地址、與另一份合約通訊,甚至建立新的合約。與其由第三方執行交易,任何發送方都可以將資金發送到智慧合約的地址來觸發這些操作。

智能合約在條件達成時自動執行的示意圖
智能合約如何運作

智慧合約之所以是一種安全的交易方式,是因為程式碼無法被更改或修改。智慧合約永遠會有一個預期的結果,這就是程式碼內建的信任機制。每當一份合約被執行時,就會改變 EVM 的狀態。

EVM 可以被稱為「狀態機」,因為它負責計算執行智慧合約程式碼所產生的狀態變化。這意味著它會維護帳戶的 ether 餘額、智慧合約的資料儲存,以及帳戶與合約層級的交易,並在這些交易完成時進行更新。所有這些動作正是改變網路「狀態」的原因。

EVM 交易改變 Ethereum 網路狀態的示意圖
EVM 交易

智慧合約主要以 Solidity 語言撰寫。EVM 無法直接執行 Solidity,因此程式碼必須先被編譯成較低階的機器指令,稱為 opcode。

Opcode——EVM 的語言

EVM 普遍被稱為圖靈完備,或更準確地說是準圖靈完備。這意味著 EVM 理論上可以解決任何計算問題。這是透過執行稱為 EVM opcode 的機器層級指令來完成的。

EVM opcode 協助 EVM 完成智慧合約或交易的特定任務。目前 EVM 大約可以執行 150 種 opcode,涵蓋各種操作,包括:算術運算、停止、記錄、複製、push、記憶體操作、比較、交換,以及取得區塊與環境資訊。你可以在這裡找到 opcode 清單。

EVM 操作碼的示意圖,即 EVM 執行的機器層級指令
EVM 操作碼

為了提升效率,EVM 會將其 bytecode 轉換成 opcode,每個 opcode 在 bytecode 中對應一個或多個位元組。每個 opcode 操作在被 EVM 執行時,都需要消耗特定數量的 gas。你可能聽過 gas,但它到底是什麼?

Gas——EVM 的燃料

Gas 大概是關於 EVM 討論最多、卻也最少人真正理解的主題。在撰寫本文時,gas 價格可能非常高,不過目前有一些努力正試圖改善這個問題。高昂的 gas 價格可能是 Ethereum 走向主流的一大障礙。但為什麼我們必須支付 gas 費用,又是什麼導致價格這麼高?

Gas 的目的是作為費用,用來支付每個 Ethereum 節點執行智慧合約操作所需的運算成本。之所以需要對運算收取費用,是為了防止攻擊者透過部署大量需要長時間運算的複雜合約,讓網路陷入停擺。這類 DDoS 攻擊之所以會受到抑制,正是因為執行成本太高。

每個 opcode 都被賦予一個gas 成本,越複雜的 opcode 成本越高。舉例來說,簡單的加法運算需要 3 gas,而每筆交易的起始成本是 21,000 gas。大部分的抱怨其實不是針對 gas 本身,而是針對成功完成交易所需的 gas limit。

Gas limit 是發送方願意為交易的執行與驗證支付的最大 gas 數量。要計算 gas 費用,可以將總 gas 成本(各操作的基礎數值)乘以 gas price(完成這些操作的價格)。這就像替汽車加油一樣,既有汽油本身的價格,也有到達目的地所需的油量。

Gas 費用 = 總 Gas 成本 x Gas Price

Gas 費用是用來補償驗證者,因為他們負責確認交易中的資訊是有效的、EVM 沒有出現錯誤或異常,並確認發送方確實擁有支付運算所需的資金。當發送方設定較高的 gas limit 時,這表示該操作較為複雜,也因此激勵驗證者為了獲得更高的報酬而優先處理該交易。

燃料費如何補償驗證者進行 EVM 運算的示意圖
EVM 燃料費

當網路活動量高時,驗證者可以直接從待處理交易池中,挑選 gas limit 較高的交易來處理。因此 gas 費用會受到供需影響。好消息是,任何未被消耗的 gas 都會退還給發送方。

如果預先支付的 gas limit 被用盡,驗證者仍然會因為其工作獲得補償,但該筆交易不會完成。從這個角度來看,EVM 是準圖靈完備的,因為它能完成的運算,會受限於發送方願意支付的金額。

EVM 的使用案例

在了解了 EVM 的各個組成元素後,讓我們來看看這些部分如何結合起來,為 Ethereum 上的各個專案提供動力:

ERC-20 代幣

ERC-20 代幣是可以在地址之間轉移的代幣,其數量固定,且在整個網路中價值一致。遵循 EVM 上定義好的資料結構的智慧合約,被用來建立 ERC-20 代幣。這個資料結構控制代幣的命名、分配、供給量與監控。

有多個應用與專案使用 ERC-20 代幣來激勵使用者。Livepeer 是一個去中心化的影音串流網路,它使用 Livepeer token(LPT)來激勵那些為網路提供資源的人。Nexus Mutual 是建立在智慧合約上的去中心化保險,它使用 NXM token 讓使用者可以購買保障並提出理賠。

去中心化交易所

去中心化交易所會部署智慧合約,讓使用者可以交換 ERC-20 代幣。這些智慧合約被稱為自動做市商(Automated Market Makers,AMM),因為它們讓使用者可以在沒有任何第三方控制的情況下,貢獻資金到特定代幣的流動性池中。一些常見的交易所,如 UniswapSushiSwap,都是這種 AMM 模型的應用。

自動做市商透過流動性池撮合代幣兌換的示意圖
自動做市商

ERC-721 代幣

另一個廣受歡迎的代幣標準,是 ERC-20 那不可替代的表親——ERC-721。這些智慧合約被用來鑄造 NFT(Non-fungible token,非同質化代幣),也就是在區塊鏈上具有獨特價值的代幣。創作獨一無二的藝術作品是這類代幣最大的應用場景。其他遊戲領域的專案,如 Axie Infinity 與 God Unchained,也使用這類代幣作為遊戲內的收藏品。

EVM 及其未來

EVM 讓 Ethereum 成為一個平台,而不只是一條區塊鏈。然而,EVM 並非一個完美的系統,在交易速度與網路吞吐量方面仍存在許多挑戰。這是開發社群與 Ethereum 路線圖持續關注的領域。如果 Ethereum 要實現它徹底改變彼此交易方式的承諾,這一切都必須建立在 EVM 不斷改進的基礎之上。

Background gradient

打造區塊鏈魔法

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