作者: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 費用和管理它們的實用策略有了更深入的了解,您現在已經做好了駕馭以太坊環境並優化您的編碼工作的準備。祝您編碼愉快,願您的以太坊交互既具有成本效益又具有創新性!