- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 680字
- 2022-07-28 20:18:12
4.5 以太坊虛擬機(EVM)
以太坊虛擬機(Ethereum Virtual Machine),簡稱EVM,用來執行以太坊上的交易,提供智能合約的運行環境。
熟悉Java的同學,可以把EVM當作JVM來理解,EVM同樣是一個程序運行的容器。
以太坊虛擬機是一個被沙箱封裝起來、完全隔離的運行環境。
而以太坊虛擬機本身運行在以太坊節點客戶端上,各層關系如圖4-4所示。

圖4-4 EVM位置
gas
前面提到,在EVM上運行的智能合約是“圖靈完備”的,理論上可以編寫能做任何事情的程序。既然如此,惡意的執行者就可以通過執行一個包含無限循環的交易輕易地讓網絡癱瘓。
以太坊通過每筆交易收取一定的費用來保護網絡不受蓄意攻擊,這一套收費的機制稱為gas機制。
gas是衡量一個操作或一組操作需要執行多少“工作量”的單位。例如,計算一個Keccak256加密哈希函數,每次計算哈希時需要30個gas,再加上每256位被哈希的數據要花費6個gas。EVM上執行的每個操作都會消耗一定數量的gas,而需要更多計算資源的操作也會消耗更多的gas,以太坊黃皮書中定義了每一步操作需要的gas。
如果gas僅僅是一個“工作量”單位,那怎么支付費用呢?還有另一個概念——gas價格。其實每筆交易都要指定預備的gas及愿意為單位gas支付的gas價格(gas price),這是兩者的結合,gas * gas價格=交易預算。
gas價格是用以太幣(ether)來表示,沒有任何實際的gas代幣(Token)。也就是說,你不能擁有1 000個gas。
之所以稱為預算,是因為如果交易完成還有gas剩余,這些gas對應的費用將被返還給發送者賬戶。我們也可以認為gas是以太坊虛擬機的運行燃料,它在每執行一步的時候消耗一定的gas,如果給定的gas不夠,無論執行到什么位置,一旦gas被耗盡(比如降為負值),將會觸發一個out-of-gas異常,當前交易所作的所有狀態修改都將被還原。