作者: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 gwei
0.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 費用和管理它們的實用策略有了更深入的了解,您現在已經做好了駕馭以太坊環境並優化您的編碼工作的准備。祝您編碼愉快,愿您的以太坊交互既具有成本效益又具有創新性!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。