iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 3
0
Blockchain

區塊練起來-智能合約與DApp開發系列 第 3

[區塊練起來-智能合約與DApp開發] DAY 03 - 介紹智能合約(2)

貼心小語

在上一篇提到了智能合約與區塊鏈平台之間的運作與關係,此篇會繼續用以太坊為例,讓讀者更清楚了解在以太坊的手續費相關知識,在後面開發能更上手!/images/emoticon/emoticon12.gif


使用者付費機制

我們把智能合約部署到區塊鏈當中,當使用者呼叫智能合約並要變更智能合約的狀態時,會向使用者收取一定的費用,原因是智能合約不需要租用一台主機來維護,但需要靠礦工的算力來維持,所以使用者應為自己消耗的資源付出一定的虛擬貨幣作為代價,也就是交易處理的手續費,而這個手續費稱為 Gas
Gas 一般是用 Gwei 作為基本單位,實際支付的貨幣就是 ETH,而 1 Gwei = 0.000000001 ETH

Gas

其實手續費會稱為 Gas 是有點道理的,我們可以想像開車要到某個定點時需要消耗汽油,開到一半沒有油了,既不能到達目的地,消耗掉的汽油也不會復原;若加滿油出發前往目的地,到達目的地後,還有剩餘的汽油,這些汽油還是會保留在車子的油箱內。同理, Gas 是處理交易用的燃料,在處理交易的過程中,如果 Gas 不足就無法完成交易,並且已經消耗掉的 Gas 沒有辦法歸還;如果 Gas 過多,交易完成了,就會將剩下的 Gas 歸還給使用者。

那麼 Gas 是如何決定的呢?就是看 Gas PriceGas Limit

Gas Price

Gas Price 是使用者願意付出的 Gas 單價,假設 Gas Price 設定為 30000 Gwei 的話,就是願意付出單價 0.00003 ETH 。 Gas Price 的高低會影響交易被處理的速度,礦工會依照 Gas Price 的高低來決定先處理哪筆交易,所以如果想比較快完成交易的話,就必須將 Gas Price 設定高一點。

Gas Limit

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


今日小結

今天的內容大致整理一下:

  1. 了解使用者付費的觀念
  2. 了解 Gas 的觀念與計算

參考資料

到底什麼是 Gas Price、Gas Limit 和 Tx Fee?


上一篇
[區塊練起來-智能合約與DApp開發] DAY 02 - 介紹智能合約(1)
下一篇
[區塊練起來-智能合約與DApp開發] DAY 04 - 智能合約開發工具
系列文
區塊練起來-智能合約與DApp開發31

尚未有邦友留言

立即登入留言