在過去的幾年里,很多人(包括我自己)進入了加密貨幣空間,任何與以太坊有過接觸的人都可能會問自己,地球是什么氣體?簡單地說,Gas為以太坊網絡提供的動力,就像汽油為汽車提供動力一樣。本文將為您揭示這一聲明,以便您在本文結束時對Gas的真正含義有一個堅實的了解。
以太坊網絡
Gas為以太坊網絡提供的動力,就像汽油為汽車提供的動力一樣,這到底意味著什么?為了解釋這一點,我需要給你們一些關于以太坊網絡主要用途的背景知識。以太坊網絡是一個計算機網絡,它將在區塊鏈上執行代碼并更新其全局狀態。好吧這聽起來有點復雜。
這最終意味著,網絡上的計算機正在執行代碼和存儲數據。這段代碼的執行占用了資源(CPU、RAM等),并且因為網絡上的每臺計算機都必須執行它。這提供了一種簡單的方法來打破網絡,創建一個具有無限循環的智能合約,因為網絡上的每個節點都試圖執行他們會發現他們自己被卡住的代碼,并且不能為任何其他交易提供服務。
以太坊的開發人員和設計人員意識到了這一點,并理解必須有與代碼執行和存儲相關的成本才能防止這種情況發生。這種成本被稱為Gas。
智能合約
當我提到代碼的執行時,我指的是以太坊網絡上的所有交易,但是在本文中,我想重點討論智能合約。智能合約通常是用像solid這樣的高級編程語言編寫的。這里有一個簡單的智能合約的例子,它把兩個數字加在一起,并返回結果。
SOLIDITY
pragma solidity ^0.4.24;contract abc {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
return c;
}
}
這種可靠的代碼編譯成EVM (以太坊虛擬機)字節碼的方式與java編譯成JVM字節碼的方式相同。EVM是一種面向安全的虛擬機,旨在允許全球計算機網絡執行不可信代碼。
EVM本質上是占用您的CPU、RAM等的一部分,并設置一臺虛擬計算機。下面是上面編譯成十六進制和字符串字節碼的可靠度代碼,
HEX BYTECODE
6080604052348015600f57600080fd5b50603580601d6000396000f3006080604052600080fd00a165627a7a72305820a2425c36ccea0b4e81864448087f7f7a36fb11875dfb63711a27fcb427ad1cd00029
STRING BYTECODE
PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 LOG2 TIMESTAMP 0x5c CALLDATASIZE 0xcc 0xea SIGNEXTEND 0x4e DUP2 DUP7 DIFFICULTY 0x48 ADDMOD PUSH32 0x7F7A36FB11875DFB63711A27FCB427AD1CD00029000000000000000000000000
注意,十六進制和字符串字節碼在內容上完全相同,只是用兩種不同的格式表示。從字符串字節碼可以看出,有一些簡單的指令,如PUSH1等。EVM的每個opt代碼都有一個相關的Gas值。例如PUSH1,將一個字節項放在堆棧上的命令的開銷為3,而計算KECCAK256等開銷較大的計算(計算Keccak-256哈希值的開銷為30 +(6乘以被哈希的單詞數)。
Gas價格,Gas限額和耗盡
你可能參與了ICO,或者你只是簡單地把一些ETH轉移到另一個賬戶,在這兩種情況下,你可能被要求提供一個Gas限額和一個Gas價格。一般來說,它們預先填滿了推薦值,但這兩個值實際上是什么意思呢?“Gas限額”指的是你將在這筆交易中使用的Gas量,而“Gas價格”指的是你愿意為一種Gas支付的以太幣數量。你支付的方程很簡單,
Gas PAID = Gas PRICE * Gas USED
CONSTRAINT
Gas USED 《= Gas LIMIT
所使用的Gas是執行合約所使用的量,Gas限額對合約執行所能使用的最大Gas量起約束作用。這可以阻止惡意代碼或低效代碼耗盡您的以太坊帳戶。
舉個簡單的例子,如果我設定了100的Gas上限和1ETH的Gas價格,并且我執行了一個需要88Gas的合約,那么我將為執行該代碼支付88ETH。如果我簽了不同的合約,需要101個Gas,而不是88個,價格和限制條件相同,合約將會在合約結束前用完。這是因為我設置了100天然氣的上限,這意味著我愿意支付的最高執行這個合約是100Gas。在合約執行過程中耗盡Gas將導致它恢復所做的所有更改。盡管如此,因為它仍然要完成計算,你仍然要為你用完的Gas付費,在這里是100,總成本也就是100。
評論
查看更多