以太坊虛擬機 (EVM)

以太坊虛擬機 以太坊虛擬機器 (EVM) 是一個去中心化的虛擬環境,它能夠在所有以太坊節點上以一致且安全的方式執行程式碼。節點運行 EVM 來執行智能合約,使用“衡量操作所需的運算量,確保高效率的資源分配和網路安全。

條件:

要理解EVM,需要對常見的電腦科學術語有一定的了解,例如位元組、記憶體和堆疊。此外,熟悉密碼學和區塊鏈的概念,例如雜湊函數和默克爾樹,也會有所幫助。

從帳本到狀態機

像比特幣這樣的區塊鏈通常被描述為“分散式帳本”,它維護著一份活動記錄,並遵循一套規則來控制修改。例如,一個比特幣地址花費的比特幣數量不能超過其收到的比特幣數量。這些規則是比特幣以及許多其他區塊鏈上所有交易的基礎。

雖然以太坊擁有自己的原生加密貨幣(以太幣),規則也類似,但它也支援一項更強大的功能: 智能合約為了更好地理解這一點,可以將以太坊描述為一個分散式狀態機。以太坊的狀態是一個龐大的資料結構,它不僅保存所有帳戶和餘額,還包含一個機器狀態,該狀態可以根據預先定義的規則在區塊之間發生變化,並執行任意機器代碼。 EVM(以太坊虛擬機器)定義了這些狀態變化的規則。

EVM和以太坊有什麼差別?

乙太坊 以太坊是一個平台,它允許用戶在去中心化的電腦網路上創建和運行應用程式。它擁有自己的數位貨幣,稱為以太幣 (ETH),用於在網路上進行支付。您可以將以太坊想像成一台巨大的共享計算機,任何人都可以用它來構建和運行自己的應用程序,而無需中央機構的控制。

以太坊虛擬機 它就像這台巨型計算機內部的引擎。它確保網路中的所有應用程式和智慧合約(自動協定)在每台電腦上以相同的方式運作。為了保持公平和高效,EVM 使用一種名為「gas」的系統來衡量每個任務所需的運算能力,從而確保資源不會被浪費。

簡單來說,以太坊是一個完整的平台,它允許你建立和使用去中心化應用程式和合約,而 以太坊虛擬機 它是運行這些應用程式和合約的平台的一部分,確保網路中所有電腦都能流暢、一致地運行。這就是 EVM 和以太坊的差別。

以太坊狀態轉換函數

EVM 的行為類似於數學函數:給定一個輸入,它會產生一個確定性的輸出。這可以正式地描述為一個狀態轉移函數:

\[ Y(S, T) = S' \]

給定一個舊的有效狀態 \( S \) 和一組新的有效交易 \( T \),以太坊狀態轉換函數 \( Y(S, T) \) 產生一個新的有效輸出狀態 \( S' \)。

在以太坊中,狀態是一個龐大的資料結構,稱為改進的 Merkle Patricia Trie,它透過雜湊值將所有帳戶連結起來,並將它們簡化為儲存在區塊鏈上的單一根雜湊值。

交易

交易是帳戶發出的經過加密簽名的指令,分為兩類:一類是訊息調用,另一類是合約創建。合約建立會產生一個新的合約帳戶,其中包含已編譯的智慧合約字節碼。當另一個帳戶向該合約發出訊息呼叫時,就會執行其字節碼。

電子投票機使用說明

EVM 以堆疊式機器的形式運行,深度為 1024 項,每項為 256 位元字,選擇此深度是為了相容於 256 位元加密技術(例如 Keccak-256 雜湊或 secp256k1 簽章)。在執行過程中,EVM 維護一個臨時記憶體(一個字尋址的位元組數組),該記憶體不會在交易之間持久存在。合約擁有一個與帳戶關聯的 Merkle Patricia 儲存樹(一個字尋址的字數組),該儲存樹也是全域狀態的一部分。

編譯後的智能合約字節碼執行如下: 以太坊虛擬機 操作碼,執行標準堆疊操作,如 XOR、AND、ADD、SUB 等,以及區塊鏈特定操作,如 ADDRESS、BALANCE 和 BLOCKHASH。

EVM實施

所有 EVM 實作都必須遵循以太坊黃皮書規範。在以太坊的發展歷程中,EVM 經歷了多次修訂,最終形成了多種程式語言的實現,其中包括:

  • Py-EVM(Python)
  • evmone(C++)
  • ethereumjs-vm(JavaScript)
  • eEVM(C++)
  • revm(Rust)

這些實作措施確保 EVM 在不同的平台上保持一致性和安全性。