以太坊中的gas、gas price、gas limit到底是什麽
gas是“燃料”的意思,在以太坊區塊鏈上實現了一個EVM(以太坊虛擬機)的代碼運行環境,在鏈上執行寫入操作時,網絡中的每個全節點都會進行相同的計算並存儲相同的值,這種執行的消耗是昂貴的,為了促使大家將能在鏈下進行的運算都不放到鏈上進行,也為了獎勵礦工,因此在鏈上每執行一個寫入操作時,都需要支付一定的費用,用gas為單位來計數,每個在鏈上可以執行的命令都設置了一個消耗的gas值,例:PUSH操作需要消耗3個gas,一次轉賬一般要消耗21000gas,gas使用ETH來支付。
註意:無論您執行的命令是成功還是失敗,都需要支付計算費用,即使失敗,節點也驗證並執行了您的交易(計算),因此必須和成功執行支付一樣的費用
什麽是gas limit
每個區塊有gas limit,即單個區塊允許的最多gas總量,以此可以用來決定單個區塊中能打包多少筆交易。
我們每一次交易或合約調用都要設置一個gas limit,如果該次操作所使用的gas數量小於或等於您所設置的gas limit,則會被執行,但如果gas總消耗量超過gas limit,所有的操作都會被重置,但費用依舊會被收取。在執行中實際消耗的gas值總和叫gas used,沒有使用完的gas會退還到原賬號。
如果您嘗試將一個會使用超過當前區塊gas limit的交易打包,則會被網絡拒絕,會反饋“below gas limit”
什麽是gas price
在發起交易或合約調用時,我們可以自己設置gas的價格,即gas price,一般以GWei(1 ETH = 1000000000 GWei)為單位。通過gas price可以節省礦工費用,但也會減慢礦工打包的速度,礦工會優先打包gas price設置高的交易,如果您想加快轉賬,您可以把gas price設置得更高,這樣您就可以插隊靠前。
在定義gas price時候,推薦瀏覽https://ethgasstation.info/ 這裏能看到以太坊區塊鏈上最近完成的交易對應的消耗單價、記錄時間、等待時間、手續費均價等。根據自身交易需求,我們可以參考右下Safelow/Standard/Fast三個速度對應的gasPrice。
總結
- gas limit由我們自己設定,相當於我們預計汽車需要加多少升汽油;
- gas price由我們自己設定,相當於每升汽油的價格;
- 一次交易或調用實際需要消耗的gas(gas used)由該次交易或調用過程中執行的命令決定;
- gas used 必須小於或等於gas limit;
- 實際支付的費用 = gas used * gas price。
以太坊中的gas、gas price、gas limit到底是什麽