乙太坊中的機器狀態是什麼?
第 9.4.1 節。乙太坊論文(彼得堡版本 41c1837 — 2021-02-14)指出:
機器狀態μ定義為元組 ( g , pc , m , i , s ),它們是可用的 gas,程序計數器pc ∈ N_256,記憶體內容,記憶體中的活動字數(從位置 0 開始連續計數) ) 和堆棧內容。記憶體內容μ_m是大小為 2^256 的一系列零。
此外,在本文件中,據說機器狀態易於根據一組預定義的規則在塊與塊之間發生變化,並且可以執行任意機器程式碼。從塊到塊改變狀態的具體規則由 EVM 定義。
此外,在文件中,還有一個外部資源將機器狀態說明為 EVM 中易失性記憶體的一部分。
那麼什麼是機器狀態,可以改變機器狀態的預定義規則是什麼,它與 EVM 有什麼關係呢?
機器狀態將是合約執行時字節碼將被執行的環境。一種用於 EVM 字節碼的虛擬處理器。
從文本中“預定義的規則”似乎意味著一個分叉。一些分叉改變了操作碼定價,影響了gas消耗的評估方式,並引入了更新的操作碼來修改機器狀態行為。
機器狀態在內部維護,並在 EVM 的每個執行週期後更新。在 EVM 中執行一個“迭代器函式”,它輸出狀態機單個週期的結果。
機器狀態是一個由以下元素組成的元組:
• 可用氣體
• 程序計數器,最大為 256 的正整數
• 記憶體的內容(一系列大小為 2 256 的零)
• 記憶體中的活動字數(從位置 0 開始連續計數)
• 堆棧的內容
迭代器函式
迭代器函式執行各種重要功能,用於設置機器的下一個狀態並最終設置世界狀態。這些功能包括:
• 它從機器程式碼儲存在執行環境中的字節數組中獲取下一條指令。
• 它相應地從堆棧中添加/刪除(PUSH/POP)項目。
• 根據指令/操作碼的氣體成本減少氣體。它增加了程序計數器(PC),它跟踪我們在合約程式碼中的位置。