在上一篇提到了智能合約與區塊鏈平台之間的運作與關係,此篇會繼續用以太坊為例,讓讀者更清楚了解在以太坊的手續費相關知識,在後面開發能更上手!
我們把智能合約部署到區塊鏈當中,當使用者呼叫智能合約並要變更智能合約的狀態時,會向使用者收取一定的費用,原因是智能合約不需要租用一台主機來維護,但需要靠礦工的算力來維持,所以使用者應為自己消耗的資源付出一定的虛擬貨幣作為代價,也就是交易處理的手續費,而這個手續費稱為 Gas
。Gas
一般是用 Gwei
作為基本單位,實際支付的貨幣就是 ETH
,而 1 Gwei = 0.000000001 ETH 。
其實手續費會稱為 Gas
是有點道理的,我們可以想像開車要到某個定點時需要消耗汽油,開到一半沒有油了,既不能到達目的地,消耗掉的汽油也不會復原;若加滿油出發前往目的地,到達目的地後,還有剩餘的汽油,這些汽油還是會保留在車子的油箱內。同理, Gas
是處理交易用的燃料,在處理交易的過程中,如果 Gas
不足就無法完成交易,並且已經消耗掉的 Gas
沒有辦法歸還;如果 Gas
過多,交易完成了,就會將剩下的 Gas
歸還給使用者。
那麼 Gas
是如何決定的呢?就是看 Gas Price
與 Gas Limit
。
Gas Price
是使用者願意付出的 Gas
單價,假設 Gas Price
設定為 30000 Gwei 的話,就是願意付出單價 0.00003 ETH 。 Gas Price
的高低會影響交易被處理的速度,礦工會依照 Gas Price
的高低來決定先處理哪筆交易,所以如果想比較快完成交易的話,就必須將 Gas Price
設定高一點。
Gas Limit
就是使用者能夠接受的最大 Gas
單位,這個設計是為了防止因智能合約程式設計錯誤進入無窮迴圈導致資源浪費以及使用者的嚴重損失,當 Gas
用盡就會停止運算,簡單來說,就是設定一個停損點。但新手可能會犯一個錯誤,就是想要降低 Gas Limit
來節省 Gas
的消耗量,想說把上限調低就不會消耗到那麼多 Gas
,其實這樣的做法是不正確的,如果把 Gas Limit
設定太低,低於完成交易所需的 Gas
量,就會導致交易還沒完成 Gas
就用盡的狀況,賠了夫人又折兵!千萬要記得, Gas Limit
設定的值一定要能夠讓 Gas
涵蓋該筆交易所需的量。
前面有提到 Gas Price
為「願意付出的單價」,而 Gas Limit
為「能夠接受的最大 Gas
單位」,就好比「每公升的油價」與「汽車油箱大小」,若要求最多會花多少錢在油錢上就是算「加滿整個油箱」所花的錢,同樣的道理,如果要求Gas的最大消耗量,也就是最高手續費,公式為:
Gas Limit * Gas Price
但上面的公式只能求得「當前最高手續費」,只是估計值,就好比一個加滿的油箱有50公升,最多就是消耗這50公升,但開到目的地時還有10公升,表示實際消耗只有40公升,那麼花費的油錢就是「每公升油價」乘「消耗的公升數」,同樣的道理我們可以知道實際消耗的 Gas
量公式為:
Gas Used * Gas Price
※ 這邊有一個地方需要注意,就是一筆交易最低手續費為21000 Gas
。
今天的內容大致整理一下:
到底什麼是 Gas Price、Gas Limit 和 Tx Fee?