隨著defi熱潮的襲來,以太坊的礦工費也達到了歷史新高,之前轉賬幾分錢的時代已經遠去,隨之而來的是動輒上百元的交易費用。
很明顯,高昂的礦工費使你忍不住點進來,妄圖透過學習科普來節省礦工費。
不存在的,這篇文章頂多能讓你花錢花的更明白點。
什麼是以太坊?
“以太坊是一個分散式的平臺,可以執行智慧合約:應用程式按照既定程式執行,不會出現停機,審查,欺詐或第三方干擾的可能性。這些應用程式執行在定製構建的區塊鏈上,這是一個功能強大的全球共享基礎架構,可以透過數字流轉來代表財產的所有權。”
以太坊為什麼要有礦工費?
大家可以把太坊看作是一個龐大的計算機,每天會有紛繁的計算髮生在以太坊上,但是大家都知道區塊鏈上的資源是稀缺的,為了避免無用的操作佔用鏈上計算資源,所以以太坊最初的設計就是一個有償使用的平臺,使用者每一步的操作都需要付出相應的礦工費,這樣既避免了主鏈遭受垃圾操作的攻擊,又可以把費用獎勵給維護區塊鏈的礦工們,一舉兩得。
以太坊礦工費是怎麼計算的?
提到礦工費,很多人會脫口而出,就是gas唄!目前的確是有很多人將gas和礦工費直接畫等號來使用的。但嚴格意義來說,這種定義是不準確的。
在以太坊區塊鏈中,gas是衡量計算量的特殊單位,它用來測量一個操作或一組操作需要執行多少工作量。比如,計算一個 keccak256 加密雜湊函式,每次計算雜湊時需要 30 個 gas。
因此gas不是幣,不是錢,不是費用,所以和礦工費並不是一個東西。
那gas和礦工費有什麼關係呢?看下面這一條公式:
礦工費= gas price * gas used 用人話說,就是 :
礦工費=gas 價格*gas 用量
下面我們就來拆開講一下公式裡的一些概念。
gas price 指你願意為單位gas支付多少以太坊,這是最吸引礦工的數字,也是決定你的交易完成快慢的決定性因素,因為礦工為了獲得更多的礦工費,總是會優先為出價更高的交易服務。
所以在轉賬前一定要設定合理的 gas price,過低會長時間得不到處理,或者被移除交易,導致轉賬失敗。
gas used 是指你的這次操作消耗了多少gas,但在日常轉賬時,我們通常見不到gas used在哪裡設定,這是因為只有在轉賬完成後,我們才能看到這筆交易具體使用了多少gas。
我們在轉帳前可以設定的叫做gas limit,即gas 限額,意思是你願意為這筆操作最多使用多少gas,gas limit 和 gas used的特別像你點外賣,你預計自己可以吃多少和你實際吃多少的關係。
設定完gas limit進行轉賬後,會有以下幾種情況:
1、gas limit = gas used,即預設的 gas 和用掉的 gas 完全一致。
2、gas limit > gas used,即預設的gas沒有完全消耗完。
3、gas limit < gas used,即預設的gas不夠實際使用的。
第一種,交易成功。
第二種,交易成功。還有個好訊息是,沒有消耗完的gas會以eth的形式返回,並不會造成損失。
第三種,交易失敗。還有個壞訊息是,已經消耗的gas不會退回,損失慘重。
gas price決定你的交易走多快(多快被礦工打包),
gas limit 決定你的交易可以走多遠(可以執行多麼複雜的合約)。
基礎科普完了,你們大大的腦袋裡肯定有更大的疑惑,繼續往下看,我猜你的問題就在下面。
怎樣合理設定gas price 和 gas limit?
如果你是一個普通使用者,那麼你不需要考慮這些問題。譬如位元派這樣的錢包,在轉賬時會根據當前網路狀態幫你自動計算推薦礦工費,為你設定當前最合理的gas price 和 gas limit。
如果你是一個不甘心做普通使用者的普通使用者,這裡可以給你一些擴充套件網站,可以琢磨下,合理的gas price 和 gas limit是怎樣根據大資料推算出來的https://ethgasstation.info/index.php。另外自定義gas price 和 gas limit的功能通常都在高階選項裡。
怎樣合理降低礦工費?
前面已經學到了,
設定的礦工費= 設定gas price * 設定gas limit
雖然把gas price 和 gas limit 任意一個數值降低你的礦工費的值都會降低,但我深切的叮囑你,不要隨意降低 gas limit 。正確降低礦工費的方法應該是調低 gas price。
降低 gas limit 不會給你省錢,只會徒增你交易失敗的概率,同時你也知道,交易失敗後的礦工費是不會退還的,所以千萬不要隨意降低 gas limit
為什麼交易在區塊鏈上會失敗,提示 out of gas?
out of gas 就是指上面的第三種情況,gas limit < gas used,即預設的gas不夠實際使用的,這種情況在普通轉賬時幾乎不會發生,通常發生在與複雜只能合約互動的情況下
通常來說,在執行復雜合約時,合約應該向執行者反饋此次操作大約需要多少gas,然後錢包得到此反饋後會進行設定,因此,此類失敗的原因通常有兩個:
1、智慧合約不夠健全,專案方太應付,沒有給返回 gas limit 值
2、你用的錢包不太聰明的樣子,沒看懂對方返回的 gas limit 值
解決辦法: 1、手動給 gas limit 調高點,通常200000—300000就可以應付當前大多數的defi合約交易。2、換位元派。
設定 gas limit 是不是越高越好?
前面學到了,當gas limit > gas used 時,即預設的gas沒有完全消耗完,多設定的的部分gas還會返還給我們。
聰明的小夥伴靈機一動,那我設定儘可能大的gas limit豈不是萬無一失了?反正用不完的會還我。實際上過高的gas limit並不會提高你的交易速度。反而會給你帶來風險。
以太坊每個區塊可以處理的交易也是有限的,因此礦工需要在有限的交易數中獲得更高的收益,而過高的gas limit在礦工眼中屬於畫大餅的行為,部分的挖礦策略中會後置處理gas limit過高的交易。
此外,gas limit的存在可以有效的防止一些合約死迴圈惡意消費你的礦工費,如果你設定了過高的gas limit,恰巧又碰到了有問題的合約,那麼你gas將會一直消耗下去,直到設定的gas limit將會被消耗光,又是損失慘重的一天。
設定礦工費時候出現的gwei是什麼?
以太坊的最小單位是 wei。1 個以太幣 = 10 的 18 次方 wei,此外,以太坊還有其他的單位:
kwei(babbage)= 10 的 3 次方 wei
mwei(lovelace)= 10 的 6 次方 wei
gwei(shannon)= 10 的 9 次方 wei
microether(szabo)= 10 的 12 次方 wei
milliether(finney)= 10 的 15 次方 wei
ether = 10 的 18 次方 wei
括號裡的部分是每個單位的別名。
在以上這些單位裡,通常計算 gas 價格時使用的都是 gwei。
以上
礦工費真不是錢包收的!礦工費真不是錢包收的!礦工費真不是錢包收的!
你們的派派
2020年9月14日