作者:Rosario Borgesi
翻譯:火火,白話區塊鏈
以太坊區塊鏈徹底改變了去中心化應用程式和智慧合約,但每筆交易都會產生以太坊gas費。在本指南中,我們將揭開以太坊gas費的神秘面紗,了解其基本原理、計算方法、影響成本的因素以及在控製成本的同時優化交易的有效策略。
1.了解以太坊Gas
gas是以太坊區塊鏈上交易和智慧合約執行的燃料。它代表處理這些操作所需的計算工作,並以稱為gwei 的小面額以太幣定價(1 gwei = 10^-9 ETH)。
換句話說,gas是計算工作的計量單位,相當於一定量的以太幣。
這就是為什麼gas 費在以太坊生態系統中至關重要:
1)資源分配:gas 費充當分配網路資源的機制。透過要求用戶為其使用的運算能力和儲存空間付費,網路確保公平存取並防止資源濫用。
2)防止網絡垃圾郵件:如果沒有gas費,惡意行為者可能會用垃圾郵件交易淹沒網絡,導致系統超載並減慢合法交易的速度。 gas費使得垃圾郵件寄送垃圾郵件成本高昂且在經濟上不切實際。
3)激勵礦工:gas費激勵礦工將交易納入區塊。礦工優先考慮gas費較高的交易,鼓勵用戶為及時交易處理提供有競爭力的費用。
4)網路安全:gas費用有助於以太坊網路的安全。他們透過要求用戶支付所涉及的計算步驟來確保交易和智能合約的正確執行。這可以阻止潛在的攻擊和漏洞。
5)可擴展性和效率:透過為每個操作附加成本,gas費鼓勵開發人員編寫高效且最佳化的程式碼。對效率的關注對於擴展網路至關重要,因為它鼓勵最佳實踐並減少區塊鏈的壓力。
6)經濟模型:gas費是以太坊經濟模型的一個組成部分。它們促進了可持續的生態系統,讓礦工的努力得到補償,促進網路的成長和穩定。
2、Gas 費的組成部分
了解構成以太坊汽油費的主要組成:
1)基本費用:由協議設定,您必須至少支付此金額才能使您的交易被視為有效。
2)優先費:是添加到基本費用中的小費,以使您的交易對驗證者有吸引力,以便他們選擇將其包含在下一個區塊中。
僅支付基本費用的交易在技術上是有效的,但不太可能被包含在內,因為它沒有激勵驗證者選擇它。
優先費用取決於您發送交易時的網路使用:如果需求量很大,那麼您可能需要將優先費用設定得更高,但當需求較少時,您可以支付更少的費用。
3、交易費用計算
例如,假設喬丹必須向泰勒支付1 ETH。一筆ETH轉帳需要21,000單位的gas,基本費用為10 gwei。喬丹包括2 gwei 的小費。
總費用現在等於:
units of gas used * (base fee + priority fee)
其中base fee是協定設定的值, 是priority fee使用者設定的作為驗證器提示的值。
即21,000 * (10 + 2) = 252,000 gwei(0.000252 ETH)。
當喬丹匯款時,1.000252 ETH 將從喬丹的帳戶中扣除。泰勒將獲得1.0000 ETH。驗證者收到0.000042 ETH 的小費。 0.00021 ETHbase fee被燒毀,這意味著它將被從流通中移除。
4、讀取和寫入數據
以太坊網路在向網路寫入資料和從網路讀取資料之間進行了區分,這種區別在您編寫應用程式的方式中起著重要作用。一般來說,寫入資料稱為事務,而讀取資料稱為呼叫。
1)事務:事務在寫入或變更資料時會變更網路狀態。它可以像將以太幣發送到另一個帳戶一樣簡單,也可以像執行合約功能或向網路添加新合約一樣複雜。為了進行交易,我們必須支付gas費,並且它們需要時間來處理。
2)呼叫:呼叫可用於在網路上執行程式碼,但不會永久更改資料。它們基本上用於讀取數據,因此可以免費運行(不花費gas)。當您透過呼叫執行合約函數時,您將立即收到返回值。
5.交易對象
您可以透過在交易對像中設定以下參數來設定提交交易時願意支付的gas量:
1)GasLimit:交易可以消耗的最大Gas 單位量。 EVM 指定每個計算步驟所需的氣體單位。
2)maxPriorityFeePerGas:作為驗證器小費包含的消耗Gas 的最高價格。
3)maxFeePerGas:願意為交易支付的每單位Gas 的最高費用(包括baseFeePerGas和maxPriorityFeePerGas)
6、倫敦升級(EIP-1559)
在倫敦升級之前,費用的計算沒有區分基本費用和優先費用。
在交易對像中我們可以設定:
1)GasLimit/startGas:交易可以消耗的最大Gas 單位量。和之前一樣。
2)GasPrice:我們願意為每單位Gas 支付的wei 金額。
假設Alice 必須向Bob 支付1 ETH。交易中,gas限額為21,000單位,gas價格為200 gwei。
總費用為:Gas units (limit) * Gas price per unit即21,000 * 200 = 4,200,000 gwei0.0042 ETH
7.複雜交易中的費用計算
為了更了解交易成本,我們可以查看EVM 操作碼。那我們來計算一下執行這個函數的成本:
函數doMath ( uint a, uint b ) { a + b; b - a; a * b; a== 0;}
a + b (ADD) 成本3 個氣體單位b - a (SUB) 成本3 個氣體單位a * b (MUL)成本5 個氣體單位a == 0 (EQ) 成本3 個氣體單位
所以這筆交易的總成本是14個gas單位。
需要理解的重要一點是,如果在交易對像中我們指定的gasLimit等於6,則只會執行前兩個操作,然後交易將被停止,並且支付的gasFee將不會恢復,因為我們必須支付完成的工作。
因此,如果我們必須將參數gasLimit設定為一個足夠的值,以便我們的交易能夠被執行並且不會丟失我們的以太幣。
在這個特定的例子中,計算天然氣費用相對簡單。然而,對於更複雜的函數,尤其是那些涉及不同大小變數循環的函數,提前確定天然氣費用可能具有挑戰性。
在這種情況下,我們可以利用estimateGas兩個最著名的開發庫提供的功能:ethers.js和web3.js。該函數允許我們估計與在以太坊區塊鏈上執行特定函數相關的天然氣成本。
然而值得提醒的是,設定gasLimit和maxFeePerGas始終是一個好習慣,以避免執行會消耗太多以太幣的交易。
8.降低Gas 費的策略1)利用第2 層
Layer-2 是建構在以太坊區塊鏈之上的輔助框架或協定。這些解決方案旨在透過處理以太坊主鏈(稱為第1 層)以外的大多數交易來增強可擴展性並優化交易速度。 Layer-1 涉及基礎以太坊區塊鏈,其中交易成本高昂,並且由於高需求可能面臨可擴展性問題。
在各種Layer-2 方法中,有Arbitrum和Optimism中採用的Rollups 。
Rollups 將多個交易聚合為單一交易,壓縮資料並將其儲存在以太坊主網路上。這顯著降低了gas 費用並提高了可擴展性,因為單一主網交易可以代表大量的鏈下交易。
2)在網路擁塞減少期間運行
如果我們想在第一層上操作,節省費用的解決方案似乎是顯而易見的:我們必須在網路不太擁擠的時候發出交易。
事實上,以太坊區塊鏈每秒只允許大約20-40 筆交易(TPS)(這是所有以太坊用戶的總數);當達到限制時,用戶被迫相互競爭以獲取其交易,這會導致費用上漲。
要檢查網路負載,我們可以使用Etherscan。
3)盡量減少交易
以太坊區塊鏈上的每筆交易都會產生成本,稱為gas費。為了減少這些費用,必須盡可能將多個操作合併到一個交易中。例如,將多個Token傳輸或與智慧合約的互動捆綁到單一交易中可以顯著降低總體成本。
4)優化程式碼複雜性
以太坊交易涉及執行儲存在區塊鏈上的程式碼。複雜且低效的程式碼需要更多的運算資源,從而導致更高的gas費用。透過優化和簡化程式碼,您可以減少執行所需的gas。這涉及高效的編碼實踐、最大限度地減少冗餘計算以及利用高效的程式設計技術。
5)節能智能合約
在開發智能合約時,以最小化天然氣消耗的方式設計它們至關重要。這包括避免不必要的儲存操作、最佳化循環以及降低合約邏輯的複雜性。在開發過程中應利用氣體優化工具和最佳實務。
9、結論
總之,gas費是以太坊的重要組成部分,它維護網路完整性、激勵正確使用、確保安全性並支援可擴展性,所有這些共同有助於建立高效且可持續的區塊鏈網路。
在本文中,我們探討了gas 費的計算和估算,深入了解了減輕其影響的各種策略。透過採用優化技術、利用Layer2 解決方案以及實施節省gas 的智慧合約程式碼,使用者和開發人員可以有效降低交易成本並提高以太坊網路上應用程式的整體效率。
透過對gas 費用和管理它們的實用策略有了更深入的了解,您現在已經做好了駕馭以太坊環境並優化您的編碼工作的準備。祝您編碼愉快,願您的以太坊互動既具有成本效益又具有創新性!