跳到正文

Gas 與交易費用

依分叉版本介紹 gas 單位、固有與執行成本、EIP-1559 費用上限、基礎費銷毀、優先費、還原、gas 耗盡、退款、blob gas 和 L2 費用組成。

更新於

僅供教育參考,不構成投資或交易建議。費用取決於特定的鏈、分叉、交易類型、執行路徑、狀態、費用市場、排序器或建構者政策及納入時間。

直接答案

Gas 是協定衡量執行工作量和狀態存取的記帳單位;gas 費用則是用計費 gas 單位乘以每單位價格得出的貨幣費用。在採用 EIP-1559 的以太坊上,effectiveGasPrice = min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas),執行費為 gasUsed * effectiveGasPrice;其中基礎費部分被銷毀,優先費部分透過區塊的費用收款方路徑支付。Gas 上限和費用上限授權的是最大值,並非一定會支出的金額。

實際 gas 用量取決於 calldata、操作碼路徑、記憶體擴充、冷/熱狀態存取、儲存變更、巢狀呼叫、預編譯合約、成功或失敗、退款和生效的分叉。提高價格可以增強交易被納入的競爭力,卻無法修復還原、gas 上限不足、惡意合約、過時報價或錯誤 calldata。Blob 交易和許多 L2 還會產生獨立的資料費或協定費,不能預設併入 EVM gas。

網路費用
0.000462 native
法幣等值
$1.39
基礎費
22 gwei

結果是教育用途的近似值。除非明確展示,否則未計入交易場所規則、稅費、延遲、預言機行為及其他協議參數。

運作機制

  1. 鎖定鏈、分叉、區塊或狀態標籤、交易類型、發送者、nonce、目的位址、轉帳價值、calldata、存取清單、blob 欄位、gas 代幣和費用幣別。記錄報價對應的是 L1 交易、L2 執行、資料發布、提領還是組合路徑。
  2. 在執行前重建固有 gas:交易封套、calldata 位元組成本、合約建立與存取清單費用,以及交易類型特有額外成本。如果 gas 上限低於固有 gas,或發送者無法通過協定的最高成本有效性檢查,交易會在納入執行前遭拒絕,而不是納入後還原。
  3. 依目標分叉追蹤執行。衡量操作碼動態成本、記憶體擴充、冷/熱帳戶或儲存槽、SSTORE、呼叫 gas 轉送、價值移轉、預編譯費用、日誌和退款。同一個 ABI 函式在不同狀態下可能走不同分支並使用不同 gas。
  4. 區分結果。執行成功會提交效果。REVERT 會還原失敗作用域,並可能退回該呼叫框架未使用的 gas;gas 耗盡這類異常停止通常會耗盡分配給該呼叫框架的 gas。已納入的頂層失敗即使還原合約狀態、價值移轉和日誌,仍會消耗發送者 nonce 和計費 gas。
  5. 為執行 gas 定價。對類型 2 交易,依基礎費、優先費上限與總費用上限計算實際 gas 價格,再將計費 gas 拆分為銷毀的基礎費與優先費。應區分未使用 gas、未支出的費用上限餘額,以及符合資格的狀態清理所產生、且受生效退款上限約束的協定 gas 退款。
  6. 分別計算其他費用市場。Blob 交易除執行 gas 外還支付 blobGasUsed * blobGasPrice,並受 maxFeePerBlobGas 約束;blob 基礎費採用獨立調整路徑。L2 使用者費用可能包括 L2 執行費、壓縮後的 L1 資料費或 blob 成本、營運者或協定收費及利潤加成;公式與純量參數取決於特定部署和升級。
  7. 核對估算、納入和收據。簽署前,依轉帳價值加授權的最高費用核驗餘額,在鎖定狀態下模擬並設定有界費用上限。納入後,記錄 gas 上限、收據 gas 用量、實際價格、基礎費、優先費、退款影響、blob gas、L2 費用欄位、狀態和餘額變動;分別處理估算誤差、交易取代和最終確定性。

計算範例

  • 類型 2 成功交易與上限。 Gas 上限為 120,000,gas 用量為 70,000,基礎費為 25 gwei,最高優先費為 3 gwei,最高費用為 40 gwei。實際價格為 min(40, 25 + 3) = 28 gwei;實際費用為 70,000 * 28 gwei = 0.001960 ETH,其中 0.001750 ETH 被銷毀,0.000210 ETH 是優先費。執行費授權上限為 120,000 * 40 gwei = 0.004800 ETH;未使用的 50,000 gas 和未支出的費用上限餘額都不是協定狀態清理退款。
  • REVERT 與 gas 耗盡。 兩個已納入呼叫的 gas 上限均為 100,000,實際價格均為 30 gwei。呼叫 A 執行 REVERT 時,收據 gas 用量達到 60,000,費用為 60,000 * 30 gwei = 0.001800 ETH。呼叫 B 耗盡整個交易 gas 上限,費用為 100,000 * 30 gwei = 0.003000 ETH。兩次頂層失敗都會還原合約效果並消耗發送者 nonce,但 REVERT 可保留未使用 gas,gas 耗盡則不會。
  • 退款上限。 在限定於 EIP-3529 分叉的教學案例中,執行在退款前消耗 100,000 gas,產生 30,000 gas 的退款計數器。可套用的最高退款為 100,000 / 5 = 20,000 gas,因此計費 gas 為 100,000 - 20,000 = 80,000 gas。按 20 gwei 計算,費用是 0.001600 ETH 而非 0.002000 ETH,節省 0.000400 ETH;退款規則和符合資格的操作可能隨分叉改變。
  • 獨立 blob 費用市場。 假設某 blob 交易使用 100,000 執行 gas,價格為 20 gwei,並攜帶兩個 blob。按 131,072 blob gas/blob,blob gas 用量為 262,144;若 blob gas 價格為 5 gwei,blob 費用是 262,144 * 5 gwei = 0.00131072 ETH。執行費為 0.002000 ETH,協定費用合計 0.00331072 ETH。此處的 5 gwei 僅為範例;blob 費用既不是驗證者優先費,也不是 L2 使用者的完整端到端費用。

風險

  • 使用錯誤的鏈、分叉、gas 代幣、交易類型或費用幣別。
  • 混淆 gas 單位、wei、gwei、ETH 和法幣換算。
  • 將 gas 上限當成預期或實際費用。
  • 無法通過固有 gas 或最高成本的執行前有效性檢查。
  • 狀態、基礎費或 calldata 變更後仍依賴過時估算。
  • 將 gas 上限設得低於實際執行分支所需用量。
  • 誤以為提高 gas 價格可以防止合約還原。
  • 混淆 REVERT、gas 耗盡、無效操作碼和執行前拒絕。
  • 頂層狀態為 1 時漏查已被捕捉的子呼叫失敗。
  • 錯算冷/熱狀態存取或使用不完整的存取清單。
  • 忽略記憶體擴充、呼叫 gas 轉送、預編譯或日誌成本。
  • 使用過時的儲存退款規則或超過退款上限。
  • 將未使用 gas 或費用上限餘額算作協定 gas 退款。
  • 將最高費用設得低於納入區塊的基礎費。
  • 在不了解建構者或排序器政策時多付優先費。
  • 持有其他資產卻沒有原生 gas 代幣。
  • 遺漏 blob gas、blob 費用上限或資料可用性費用。
  • 將某個 L2 的執行、資料、純量和營運者費用公式視為通用公式。
  • 忽略交易取代、nonce、交易遭捨棄和餘額保留的競態。
  • 將已付費或成功的交易視為合約安全或最終確定的證明。

常見迷思

  • Gas 依轉帳價值的百分比收取。
  • 提高 gas 上限必然增加實際收費。
  • 較高的最高費用或優先費能保證執行成功。
  • 所有未使用的授權額度和狀態清理退款都是同一種機制。
  • L2 費用只等於本機 EVM gas,blob 費用就是一般執行 gas。

相關主題

來源

導覽

搜尋知識庫...