Web3智网

如何閱讀以太坊 Gas 報價:用量、上限、基本費、優先費與回滾

閱讀一筆以太坊交易的 gas 報價時,應先分開「實際使用的 gas」與「gas 上限」。協議上,gas 衡量計算工作;應付的 gas 費用是實際使用的 gas 乘以每單位 gas 的有效價格,而不是自動把 gas 上限乘上某個最高費用上限。基本費會被銷毀,優先費是驗證者收到的小費,整筆費用並非全部付給驗證者。費用以 ETH 支付,一 gwei 等於十億分之一 ETH。交易執行失敗或回滾時,仍可能為已進行的計算付費,不能認定每筆失敗交易都會全額退還 gas 費用。

Gas 衡量的是計算工作

在報價裡看到的 gas,是衡量計算工作的單位,不是轉出金額,也不是帳戶餘額。[E1] 交易要完成的運算、讀寫與狀態變更,都會消耗一定數量的 gas。介面若同時列出 gas used 與 gas limit,兩者不能互換:前者表示這筆交易實際消耗了多少計算工作,後者是發送者事先允許的上限。把上限當成已消耗的數量,會把「最多可以做多少」誤讀成「已經做了多少」。

因此,閱讀報價的第一步是確認哪一個數字代表實際用量。用量反映已執行的計算;上限只約束這筆交易最多能消耗多少。即使兩筆交易設定了相同上限,實際用量仍可不同,對應的應付費用也可以不同。

費用按用量乘以有效單價

Gas 費用等於實際使用的 gas 乘以每單位 gas 的有效價格,而不是自動以交易的 gas 上限乘以最高費用上限來結算。[E1] 最高費用一類欄位描述的是願意支付的封頂條件,不能代替實際結算公式。有效價格形成之後,仍要乘上真正用掉的 gas,才得到這筆計算工作的應付費用。

這個區分影響讀數方式。若實際用量低於上限,多出來的上限並不會自動變成已支付的計算費用。反之,也不能因為畫面上有一個較大的上限,就認為協議已經按該上限全額計費。上限的作用是限制,用量的作用是計費基礎。

基本費銷毀,優先費是小費

有效單價通常要再分成基本費與優先費來理解去向。基本費會被銷毀;優先費是驗證者收到的小費。[E1] 因此,把畫面上的整筆 gas 費用說成「全部付給驗證者」並不正確。銷毀與小費是兩筆不同去向,只是在報價中常被加總成使用者支付的總費用。

閱讀時可以先看總額,再問其中哪一部分對應基本費、哪一部分對應優先費。總額回答的是付款人付了多少;拆分回答的是這些 ETH 之後如何處置。沒有這一步,就容易把銷毀的部分也算進驗證者收入。

費用以 ETH 支付,gwei 只是微小單位

Gas 費用以 ETH 支付。[E1] 因為每單位 gas 的價格通常遠小於一枚 ETH,介面常用 gwei 表示。一 gwei 等於 10 的負九次方 ETH,也就是 0.000000001 ETH。[E1] 換算時把 gwei 數值乘上這個比例,得到 ETH,而不是把 gwei 本身當成另一種資產。

這個關係是單位定義。它不提供任何市場價格,也不表示某一時刻的基本費或優先費應該是多少。報價上的 gwei 數字只有在已知是哪一次交易、哪一組假設時,才能代入算術;不能把教科書裡的數字直接當成當下網路的費用。

回滾之後仍可能支付計算費用

交易可以在執行失敗或狀態回滾之後,仍然為已經發生的計算付費。[E1] 回滾表示成功路徑上的狀態變更沒有被保留,並不自動表示先前消耗的計算工作免費。因此,不能主張每一筆失敗交易都會拿回全部 gas 費用。[E1]

檢查失敗交易時,仍要看實際使用了多少 gas,以及該用量乘上有效單價之後的費用。成功或失敗回答的是執行結果;gas used 回答的是計算工作是否已經發生。兩者要同時閱讀,才能避免把「交易沒有達成預期結果」理解成「費用必然全額退回」。

假設性算術:用量恰為上限的一半

以下全部是假設性算術,只用來示範如何讀報價。它不是即時費用、歷史行情、投資結果,也不能外推到其他交易。假設 gas 上限為 200,000,實際使用的 gas 為 100,000,基本費為 20 gwei,有效優先費為 2 gwei,而且這個簡化例子沒有其他費用。

先求有效單價:20 gwei 加上 2 gwei,等於 22 gwei。再按實際用量計費:100,000 乘以 22 gwei,等於 2,200,000 gwei。因為一 gwei 等於 10^-9 ETH,所以 2,200,000 gwei 等於 2,200,000 乘以 10^-9 ETH,也就是 0.0022 ETH。依照所給的簡化條件,這筆假設交易的應付 gas 費用是 0.0022 ETH。

同一個假設若誤用上限,會寫成 200,000 乘以 22 gwei,等於 4,400,000 gwei,即 0.0044 ETH。那不是本例的應付費用。gas 上限是上限,不是已經消耗 200,000 gas 的證據。本例的實際用量恰好是上限的一半,所以按用量算出的 0.0022 ETH,也恰好是按上限誤算的 0.0044 ETH 的一半。這只說明用量與上限不同時,算術結果會跟著改變;它不表示真實交易的用量一定是上限的一半。

還可以在同一組假設中看去向,但仍然只是算術拆分。基本費部分是 100,000 乘以 20 gwei,等於 2,000,000 gwei,即 0.002 ETH;依協議事實,基本費會被銷毀。優先費部分是 100,000 乘以 2 gwei,等於 200,000 gwei,即 0.0002 ETH;這一部分是給驗證者的小費。0.002 ETH 與 0.0002 ETH 相加,仍是 0.0022 ETH。拆分幫助理解銷毀與小費,不能把 20 gwei 或 2 gwei 當成現行報價。

實用檢查清單

  • 先確認 gas used,再看 gas limit;費用按實際用量乘以有效單價,上限不是已消耗量。
  • 不要把 gas 上限自動乘以最高費用上限,並把乘積當成已付費用。
  • 分開基本費與優先費:基本費銷毀,優先費是驗證者小費,總額不是全部付給驗證者。
  • 以 ETH 為支付單位,並用一 gwei 等於 10^-9 ETH 做換算。
  • 交易失敗或回滾時,仍核對已使用的 gas 與對應費用,不要假設失敗就全額退費。
  • 把文中的 200,000、100,000、20 gwei、2 gwei 與 0.0022 ETH 只當作假設算術,不用來表示當下價格或可重複的結果。

來源

  • [E1] https://ethereum.org/en/developers/docs/gas/