死磕以太坊-3-理解以太坊Gas和燃料手續(xù)費(fèi)

Gas 中譯是:瓦斯、汽油,代表一種可燃?xì)怏w。這形象地比喻以太坊的交易手續(xù)費(fèi)計(jì)算模式,不同于比特幣中直接支付比特幣作為轉(zhuǎn)賬手續(xù)費(fèi), 以太坊視為一個去中心化的計(jì)算網(wǎng)絡(luò),當(dāng)你發(fā)送Token、執(zhí)行合約、轉(zhuǎn)移以太幣或者在此區(qū)塊上干其他的時候,計(jì)算機(jī)在處理這筆交易時需要進(jìn)行計(jì)算消耗網(wǎng)絡(luò)資源,這樣你必須支付燃油費(fèi)購買燃料才能讓計(jì)算機(jī)為你工作。最終燃料費(fèi)作為手續(xù)費(fèi)支付給礦工。

與比特幣不同的是,無論交易成功與否,你都需要為此支付燃料費(fèi)。這是因?yàn)榧词菇灰资?,礦工依舊為此交易進(jìn)行校驗(yàn)和計(jì)算,消耗了資源。同時你也無法在錢包中直接設(shè)置支付多少燃料費(fèi),因?yàn)閷?shí)際燃料費(fèi)是礦工根據(jù)計(jì)算得出的,并記錄在包含此交易的區(qū)塊中。

當(dāng)你聽到別人談?wù)?gas 時,實(shí)際是在討論兩個概念:gasUsed 和 gasPrice,默認(rèn)情況下是指 gasUsed。你可以把 gasUsed 看成是汽車所需多少升燃油。把 gas price 看成是燃油單價(jià)。

對于汽車,每升汽油6.46元(price),10

升汽油就是64.6元。對于以太坊,每gas是20Gwei(price),21000 個 gas 就是 20*21000 Gwei=

420000 Gwei= 0.00042 Ether。也就是說本次交易手續(xù)為 0.00042 Ether。

Tip

Gwei是以太幣的一種計(jì)算單位,具體見文末附錄:以太幣單位。

Gas Used?

那么,以太坊這臺計(jì)算機(jī)在處理交易時是如何統(tǒng)計(jì)計(jì)算量的呢?以太坊有專門的虛擬機(jī)處理交易,虛擬機(jī)根據(jù)交易中確定的一個一個的操作指令進(jìn)行逐個處理,而每個操作指令都有明文規(guī)定的Gas消耗量。 比如執(zhí)行一次加法運(yùn)算將消耗 3Gas,這樣交易需要消耗多少Gas完全取決于執(zhí)行完交易中的所有操作指令的累計(jì)Gas,交易執(zhí)行完成時虛擬機(jī)將反饋總消耗Gas量,稱之為 gasused。而你所需支付的手續(xù)費(fèi)等于gasPrice * gasUsed

以太坊操作指令對應(yīng)Gas

指令Gas UsedNotes

STOP0停止執(zhí)行

ADD3兩個數(shù)相加

MUL5兩個數(shù)相乘

SUB3兩個數(shù)相減

DIV5兩個數(shù)相除

更多細(xì)節(jié)請參見:Gas清單

Gas Limit?

因?yàn)槭掷m(xù)費(fèi)等于

gasPrice * gasUsed,用戶在轉(zhuǎn)賬,特別是執(zhí)行智能合約時 gasUsed 無法提前預(yù)知。

這樣存在一個風(fēng)險(xiǎn),當(dāng)用戶的交易涉及一個惡意的智能合約,該合約執(zhí)行將消耗無限的燃料,這樣會導(dǎo)致交易

方的余額全部消耗(惡意的智能合約有可能是程序Bug,如合約執(zhí)行陷入一個死循環(huán))。

為了避免合約中的錯誤引起不可預(yù)計(jì)的燃料消耗,用戶需要在發(fā)送交易時設(shè)定允許消耗的燃料上限,即 gasLimit。 這樣不管合約是否良好,最壞情況也只是消耗 gasLimit 量的燃料。

然而,一筆交易所必須支付的燃料已經(jīng)在區(qū)塊中通過該交易已執(zhí)行的計(jì)算量記錄。如果你不想支出太多燃料,而故意設(shè)置過底的 gas limit 是沒太多幫助的。你必須支付足夠燃料來支付本交易所必要的計(jì)算資源。如果交易尚未執(zhí)行完成,而燃料已用完,將出現(xiàn)一個Out of Gas的錯誤。特別注意的是,即使交易失敗,你也必須為已占用的計(jì)算資源所支付手續(xù)費(fèi)。比如,你通過合約給 TFBOYS 投票,設(shè)置 gasPrice=2 gwei,gasLimit=40000(實(shí)現(xiàn)投票需要40001的燃料開銷),最終你投票失敗且仍然需要支付 40000*2 gwei= 80000 gwei= 0.00008 ETH。

另外,如果最終 gasUsed 低于

gasLimit,即燃料未用完。則剩余燃料(gasLimit - gasUsed )將在交易后退還給你。比如你發(fā)送 1 Ether

到另一個賬戶B,設(shè)置 gas limit 為 400000,將有 400000 - 21000 返回給你。

Tip

21000 是標(biāo)準(zhǔn)轉(zhuǎn)賬交易的gasUsed。因此一筆標(biāo)準(zhǔn)的轉(zhuǎn)賬交易你可以設(shè)置 gasLimit 為21000。

Gas Price?

因?yàn)槟闼枰Ц兜娜剂腺M(fèi)為燃料單價(jià)(gasPrice) * 燃料開銷(gasUsed),如果你想讓交易花費(fèi)更少,你能夠做的是降低你愿意支付的燃料單價(jià)。 另一方面,降低燃料單價(jià)的壞處是交易可能需要等待很長時間才被打包到區(qū)塊中。

這是因?yàn)榻灰兹剂腺M(fèi)將歸屬于挖出本區(qū)塊的礦工。當(dāng)?shù)V工挖礦時,他需要決定哪些交易放入到區(qū)塊中,可以隨機(jī)選擇交易,也可以不包含任何交易。為了鼓勵讓礦工將你的交易放入?yún)^(qū)塊,你會考慮將燃料單價(jià)設(shè)置得足夠誘人,已確保能優(yōu)先放入?yún)^(qū)塊。

但這還是一廂情愿,因?yàn)檫@個最終取決于礦工。大部分礦工遵循一個簡單策略,優(yōu)先打包本地交易,將接受到的交易按燃油單價(jià)從高到底排列,依次放入?yún)^(qū)塊中直到塞滿區(qū)塊,或者直到低于礦工所設(shè)置的燃料單價(jià)底限。

如果你著急交易,高燃料單價(jià)會使得你的交易排在別人前面。如果不著急,你只需設(shè)置一個足夠讓礦工包含你交易的燃油單價(jià)即可。

一般情況下:

高燃料單價(jià)為50 GWEI 的交易幾乎總能放到下一個區(qū)塊。

高燃料單價(jià)為22 GWEI 的交易通常會把它放到未來的幾個區(qū)塊中。

高燃料單價(jià)為8 GWEI 的交易通常會在未來幾分鐘內(nèi)放入?yún)^(qū)塊。

下圖是最近1000個區(qū)塊中不同燃料價(jià)格對交易確認(rèn)時間的影響:

可以因?yàn)楫?dāng)前以太坊的交易處理性能(15筆/秒),當(dāng)出現(xiàn)交易高峰期擁堵時,你需要考慮調(diào)整燃料單價(jià),比如在Token創(chuàng)建后,搶購火熱,為了中簽?zāi)阈枰O(shè)置更高的燃料單價(jià),以能夠優(yōu)先搶購Token。

在設(shè)置燃料單價(jià)時,你還需要考慮加密貨幣的價(jià)格波動,相對人民幣隨時都漲跌20%。按人民幣考慮,之前的交易

10 gas price

相當(dāng)于0.3元,而現(xiàn)在可能已經(jīng)是0.4元。所以需要根據(jù)實(shí)際情況,盡量調(diào)低燃料單價(jià)。而當(dāng)網(wǎng)絡(luò)中大部分交易都是較低燃料單價(jià)時,礦工也會去調(diào)整他的底限。

那么問題來了,到底該設(shè)置多少燃料單價(jià)才合適呢?你可以到ethgasstation網(wǎng)站上查看。它將告訴你現(xiàn)在整個以太坊的情況,并給你建議的燃料單價(jià),下圖是當(dāng)前的燃料單價(jià)設(shè)置建議。

附錄?

以太幣的計(jì)算單位?

Kwei(Babbage) =103

Wei

Mwei(Lovelace) =106

Wei

Gwei(Shannon) =109

Wei

Microether(Szabo) =1012

Wei

Milliether(Finney) =1015

Wei

Ether =1018

Wei

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Gas 字面中譯是:瓦斯、汽油,是一種燃料。這非常形象的比喻了以太坊的交易手續(xù)費(fèi)計(jì)算模式,不同于比特幣中直接支付比...
    磨鏈社區(qū)閱讀 8,789評論 0 0
  • 這篇文章主要講解以太坊的基本原理,對技術(shù)感興趣的朋友可以看看。 翻譯作者:許莉 原文地址:How does Eth...
    藍(lán)肥仔閱讀 1,857評論 0 15
  • 簡介 不管你們知不知道以太坊(Ethereum blockchain)是什么,但是你們大概都聽說過以太坊。最近在新...
    Lilymoana閱讀 3,995評論 1 22
  • 這篇文章是用來幫助人們理解以太坊網(wǎng)絡(luò)上的一些基本概念和體系,包括賬戶體系、gas、礦工在區(qū)塊大小設(shè)置機(jī)制里的角色等...
    yuyangray閱讀 3,122評論 0 1
  • (I)二、課程目標(biāo)5點(diǎn)(含標(biāo)題) 二、課程目標(biāo) 透過混合學(xué)習(xí)及體驗(yàn)式學(xué)習(xí)培養(yǎng)學(xué)生以下能力: 能夠從 用戶體...
    xlayal閱讀 179評論 0 0

友情鏈接更多精彩內(nèi)容