通過錢包轉賬 ETH 或是 ERC-20 Token 時,我們知道這個轉賬需要付手續費,另外,正如《趙麗穎結婚喜訊已上鏈,手把手教你打造區塊鏈“鉆戒”》一文中介紹的,我們還可以一邊轉賬一邊在區塊鏈上“刻字”。
那么,轉賬的手續費是怎么算的呢?如果轉賬的同時還去“刻字”,是不是需要收取更高的手續費呢?今天,大白就給大家聊聊以太坊的 Gas 機制,
在以太坊網路中轉賬,雖然最后的手續費我們支付的是 ETH,但其實在以太坊內部并不直接消耗 ETH,而是消耗 Gas。“Gas”這個單詞的英文意思是“(氣體)燃料”,以太坊網路中的操作需要消耗 Gas,就如同汽車行駛需要消耗燃料一樣。
那么,交易的手續費(ETH)是如何計算的呢?我們先看一下大白在以太坊網路中的一個轉賬截圖:
在以太坊網路中轉賬,手續費的計算方式如下:
交易手續費(ETH)= Gas的單價 x 消耗的Gas數量
在大白的這筆交易中,Gas 的單價(Gas Price)是 5Gwei,也就是 0.0000000005ETH(小數點后面8個0)。這里大白再給大家介紹一下 ETH 的單位,ETH 的最小單位是 Wei,但是談到以太坊 Gas 的時候,經常用 Gwei,ETH、Gwei、Wei 之間的關系如下:
1 ETH = 10^9 Gwei(9個0)= 10^18 Wei(18個0)
知道了 Gas 的單價,我們再看下大白這筆含“刻字”的轉賬消耗的 Gas 數量:24876,所以,按照上面的公式,單價乘以數量,即可得到大白花費的手續費:
手續費 = 0.0000000005ETH x 24876 = 0.00012438ETH
汽車去加油站添加燃料,燃料的價格基本是固定不變的,但是在以太坊網路中,Gas 的單價是可以自己設置的。不過,需要注意的是,Gas 的單價會影響這筆交易被打包的速度。也就是說,Gas 的單價你給的越高,礦工為了自身利益最大化,越會優先打包你的交易。
下圖是 ethgasstation.info 網站統計的實際操作中 Gas 的單價和所需要等待的交易打包時間。在左邊統計圖中,我們可以看到,超過 70% 的以太坊網路轉賬給的 Gas 單價介于 4~20Gwei 之間,小于 1Gwei 或是大于 50Gwei 的交易占比很少,在右邊的統計圖中,我們可以看到,如果給的 Gas 單價是 4Gwei,打包交易需要的平均等待時間是 0.6 分鐘;如果是 20Gwei,平均等待時間是 0.2 分鐘,
大家常用的 imToken 錢包,在 Gas 的單價設置里,提供的是 5~100Gwei,錢包把最低單價設置為 5Gwei,保證了交易能在合理的時間內被打包,當然,如果想插隊,盡快被礦工打包,你也可以自己提高 Gas 的單價,
說完了 Gas 的單價,我們再接著說消耗的 Gas 數量,
在以太坊網路中,每一筆轉賬,無論數額大小,消耗的 Gas 是固定的,為 21000,如果添加備注(“刻字”),需要消耗額外的 Gas,回到大白的那筆交易上,大白總共花費的 Gas 數量是 24876,其中包含了 21000 的固定消耗數量,以及備注消耗的 Gas 數量 3876,備注需要消耗多少數量的 Gas,和輸入的內容長度有關,內容越多,需要消耗的 Gas 數量也越多。
如果你仔細觀察大白的那張轉賬截圖,你會發現,大白花費的 Gas 數量 24876 后面有個括號,里面是 41.46%。這個百分比是什么意思呢?如果你再仔細看截圖,你會發現,上面還有一個 Gas Limit,數值是 60000,而且它的 41.46% 正好是 24876。
Gas Limit,是指這筆操作消耗的 Gas 數量上限,這個上限值你可以自己設置,比如,大白設置的是 60000,但實際操作中并沒有達到這個上限,只用了 41.46%。
一般的錢包都會默認幫你設置這個上限值,對我們普通用戶而言,普通轉賬時這個上限值也不用去考慮。以太坊網路設置這個上限值,是以防萬一,如果碰到惡意的智能合約,該合約執行將消耗無限的燃料,這樣會導致交易方的 ETH 余額全部消耗(惡意的智能合約有可能是程式 Bug,如合約執行陷入一個死循環),
Gas Limit 如果設置過低,比如設置為 10000,任何一筆轉賬需要的 Gas 數量至少 21000,遠遠超過你設置的 Gas Limit,就會導致轉賬失敗,也就是說,Gas Limit 會影響一筆交易是否能成功。