什么是gas
Gas 是存在於以太坊虛擬機內部,作為計算工作量的計數。它一方面作為對礦工打包區塊的獎勵,另一方面,為惡意交易抬高門檻,維護以太坊網絡正常運作。 Gas 是以太坊中的燃料,它保證了以太坊生態的運作。正如汽油對於汽車的作用, Gas 不可或缺。以太坊協議規定交易或合約調用的每個運算步驟都需要收費。使用智能合約的用戶必須支付一定費用去執行該合約,而gas就像手續費,使用智能合約必須設置消耗gas的最大值,當gas消耗完或者合約執行完,就會停止執行該合約。gas使用ETH來支付。
注意:無論您執行的命令是成功還是失敗,都需要支付計算費用,即使失敗,節點也驗證並執行了您的交易(計算),因此必須和成功執行支付一樣的費用
什么是gas limit
Gas Limit:是用戶願意為執行某個操作或確認交易支付的最大 Gas 量。
如果 Gas Limit 設置過低,無法保證計算完整運行,系統將會提示“ out of gas ”,這筆交易依然被打包到區塊中,交易金額被退回,但費用依舊會被收取,交易費用作為獎勵發放給打包這個區塊的礦工。交易會失敗。
如果該次操作所使用的gas數量小於或等於您所設置的gas limit,則會被執行,在執行中實際消耗的gas值總和叫gas used,沒有使用完的gas會退還到原賬號。
正如交易有 Gas Limit ,區塊也有 Gas Limit ,即單個區塊允許的最多gas總量。每個區塊在打包的時候都會確定當前區塊的 Gas Limit 總量,以此來確定單個區塊所能打包的交易數量,所以礦工在打包每筆交易的時候都會判斷當前的 Gas 量夠不夠打包當前交易。如果您嘗試將一個會使用超過當前區塊gas limit的交易打包,則會被網絡拒絕,會反饋“below gas limit”
例如現在有 3 筆交易, A 交易 Gas Limit 為 10 , B 交易為 20 , C 交易為 30 ,如果區塊 Gas Limit 為 30 ,那么 A 交易和 B 交易將被打包。由於礦工有權力選擇哪些交易被打包,因此另一名礦工選擇將 C 交易打包進這個區塊。但是如果將 ABC 交易同時打包, Gas Limit 達到 60 ,超過區塊 Gas Limit ,這個區塊會被網絡拒絕。
什么是gas price
Gas Price:是用戶願意為每個 Gas 支付的價格,一般單位為 Gwei 。1 ETH = 1,000,000,000 Gwei
礦工總是希望獲得更多的挖礦獎勵,在打包交易的同時,交易費用越高,越容易被打包。
交易費用 = GasPrice * GasUsed
因此,Gas Price 越高,礦工將會優先打包,交易會被更快確定;如果 Gas Price 設置過低,礦工的報酬降低,交易的確認時間將會延長。如果您想加快轉賬,您可以把gas price設置得更高,這樣您就可以插隊靠前。
總結
- gas limit由我們自己設定,相當於我們預計汽車需要加多少升汽油;即執行某個操作或合約的某一條的費用。
- gas price由我們自己設定,相當於每升汽油的價格;如果想要加以快點被打包,那么可以把gas price設的高一點,就像佣金高一點
- 一次交易或調用實際需要消耗的gas(gas used)由該次交易或調用過程中執行的命令決定;
- gas used 必須小於或等於gas limit;
- 實際支付的費用 = gas used * gas price。
- 交易超過gas limit 交易會回滾,但是交易消耗的gas依然會被支付。區塊的所有交易的gas之和大於區塊的gas limit 則區塊上傳就會失敗報錯,拒絕上傳。