以太坊區塊鏈徹底改變了去中心化應用程式和智慧合約,但每筆交易都會產生以太坊 gas 費。在本指南中,我們將揭開以太坊 gas 費的神祕面紗,瞭解其基本原理、計算方法、影響成本的因素以及在控制成本的同時優化交易的有效策略。本文源自 Rosario Borgesi 於《 Ethereum Gas Fees Demystified: A Deep Dive into Transaction Costs 》,由白話區塊鏈整理、編譯及撰稿。
(前情提要: 以太坊坎昆升級核心:EIP4844的Blob為何能降低費用100倍?)
(背景補充: Rollup經濟學:我們高估了 EIP-4844 對可擴充套件性的影響)
瞭解以太坊 Gas
gas 是以太坊區塊鏈上交易和智慧合約執行的燃料。它代表處理這些操作所需的計算工作,並以稱為 gwei 的小面額以太幣定價(1 gwei = 10^-9 ETH)。
換句話說,gas 是計算工作的計量單位,相當於一定量的以太幣。
這就是為什麼 gas 費在以太坊生態系統中至關重要:
- 資源分配:gas 費充當分配網路資源的機制。通過要求使用者為其使用的計算能力和儲存空間付費,網路確保公平訪問並防止資源濫用。
- 防止網路垃圾郵件:如果沒有 gas 費,惡意行為者可能會用垃圾郵件交易淹沒網路,導致系統超載並減慢合法交易的速度。gas 費使得向網路傳送垃圾郵件成本高昂且在經濟上不切實際。
- 激勵礦工:gas 費激勵礦工將交易納入區塊中。礦工優先考慮 gas 費較高的交易,鼓勵使用者為及時交易處理提供有競爭力的費用。
- 網路安全:gas 費用有助於以太坊網路的安全。他們通過要求使用者支付所涉及的計算步驟來確保交易和智慧合約的正確執行。這可以阻止潛在的攻擊和漏洞。
- 可擴充套件性和效率:通過為每個操作附加成本,gas 費鼓勵開發人員編寫高效且優化的程式碼。對效率的關注對於擴充套件網路至關重要,因為它鼓勵最佳實踐並減少區塊鏈的壓力。
- 經濟模型:gas 費是以太坊經濟模型的一個組成部分。它們促進了可持續的生態系統,讓礦工的努力得到補償,促進網路的增長和穩定。
Gas 費的組成部分
瞭解構成以太坊汽油費的主要組成部分:
- 基本費用:由協議設定,您必須至少支付此金額才能使您的交易被視為有效。
- 優先費:是新增到基本費用中的小費,以使您的交易對驗證者有吸引力,以便他們選擇將其包含在下一個區塊中。
僅支付基本費用的交易在技術上是有效的,但不太可能被包含在內,因為它沒有激勵驗證者選擇它。
優先費用取決於您傳送交易時的網路使用情況:如果需求量很大,那麼您可能需要將優先費用設定得更高,但當需求較少時,您可以支付更少的費用。
交易費用計算
例如,假設喬丹必須向泰勒支付 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 被燒燬,這意味著它將被從流通中移除。
讀取和寫入資料
以太坊網路在向網路寫入資料和從網路讀取資料之間進行了區分,這種區別在您編寫應用程式的方式中起著重要作用。一般來說,寫入資料稱為事務,而讀取資料稱為呼叫。
- 事務:事務在寫入或更改資料時會更改網路狀態。它可以像將以太幣傳送到另一個帳戶一樣簡單,也可以像執行合約功能或向網路新增新合約一樣複雜。為了進行交易,我們必須支付 gas 費,並且它們需要時間來處理。
- 呼叫:呼叫可用於在網路上執行程式碼,但不會永久更改資料。它們基本上用於讀取資料,因此可以免費執行(不花費 gas)。當您通過呼叫執行合約函式時,您將立即收到返回值。
交易物件
您可以通過在交易物件中設定以下引數來設定提交交易時願意支付的 gas 量:
- GasLimit:交易可以消耗的最大 Gas 單位量。EVM 指定每個計算步驟所需的氣體單位。
- maxPriorityFeePerGas:作為驗證器小費包含的消耗 Gas 的最高價格。
- maxFeePerGas:願意為交易支付的每單位 Gas 的最高費用(包括 baseFeePerGas 和 maxPriorityFeePerGas)
倫敦升級 (EIP-1559)
在倫敦升級之前,費用的計算沒有區分基本費用和優先費用。
在交易物件中我們可以設定:
- GasLimit/startGas:交易可以消耗的最大 Gas 單位量。和之前一樣。
- 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
複雜交易中的費用計算
為了更好地瞭解交易成本,我們可以檢視 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 始終是一個好習慣,以避免執行會消耗太多以太幣的交易。
降低 Gas 費的策略
利用第 2 層
Layer-2 是構建在以太坊區塊鏈之上的輔助框架或協議。這些解決方案旨在通過處理以太坊主鏈(稱為第 1 層)之外的大多數交易來增強可擴充套件性並優化交易速度。Layer-1 涉及基礎以太坊區塊鏈,其中交易成本高昂,並且由於高需求可能面臨可擴充套件性問題。
在各種 Layer-2 方法中,有 Arbitrum 和 Optimism 中採用的 Rollups 。
Rollups 將多個交易聚合為單個交易,壓縮資料並將其儲存在以太坊主網上。這顯著降低了 gas 費用並提高了可擴充套件性,因為單個主網交易可以代表大量的鏈下交易。
在網路擁塞減少期間執行
如果我們想在第一層上操作,節省費用的解決方案似乎是顯而易見的:我們必須在網路不太擁堵的時候發出交易。
事實上,以太坊區塊鏈每秒只允許大約 20-40 筆交易 (TPS)(這是所有以太坊使用者的總數);當達到限制時,使用者被迫相互競爭以獲取其交易,這會導致費用上漲。
要檢查網路負載,我們可以使用 Etherscan。
儘量減少交易
以太坊區塊鏈上的每筆交易都會產生成本,稱為 gas 費。為了減少這些費用,必須儘可能將多個操作合併到一個交易中。例如,將多個 Token 傳輸或與智慧合約的互動捆綁到單個交易中可以顯著降低總體成本。
優化程式碼複雜性
以太坊交易涉及執行儲存在區塊鏈上的程式碼。複雜且低效的程式碼需要更多的計算資源,從而導致更高的 gas 費用。通過優化和簡化程式碼,您可以減少執行所需的 gas。這涉及高效的編碼實踐、最大限度地減少冗餘計算以及利用高效的程式設計技術。
節能智慧合約
在開發智慧合約時,以最小化天然氣消耗的方式設計它們至關重要。這包括避免不必要的儲存操作、優化迴圈以及降低合約邏輯的複雜性。在開發過程中應利用氣體優化工具和最佳實踐。
結論
總之,gas 費是以太坊的重要組成部分,它維護網路完整性、激勵正確使用、確保安全性並支援可擴充套件性,所有這些共同有助於構建高效且可持續的區塊鏈網路。
在本文中,我們探討了 gas 費的計算和估算,深入瞭解了減輕其影響的各種策略。通過採用優化技術、利用 Layer2 解決方案以及實施節省 gas 的智慧合約程式碼,使用者和開發人員可以有效降低交易成本並提高以太坊網路上應用程式的整體效率。
通過對 gas 費用和管理它們的實用策略有了更深入的瞭解,您現在已經做好了駕馭以太坊環境並優化您的編碼工作的準備。祝您編碼愉快,願您的以太坊互動既具有成本效益又具有創新性!
📍相關報導📍
2023,你該關注的「以太坊改進」提案?ERC-4337 ERC-6551 ERC-5507 EIP-4844