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