跳到正文

區塊 Gas 上限

考量分叉邊界的以太坊區塊 Gas 上限指南,涵蓋 EIP-1559 目標、單筆交易上限、Gas 使用量、費用核算、吞吐量估算與節點資源權衡。

更新於

僅供教育參考,不構成財務或安全建議。Gas 上限、目標、計價規則、單筆交易上限、操作碼成本與用戶端政策會因鏈、分叉及觀察時間而異。

直接答案

區塊 Gas 上限是記錄在以太坊區塊標頭中的執行 Gas 容量上限。區塊收錄的交易必須符合協定核算規則,使總 gasUsed 不超過 gasLimit。Gas 是抽象計量單位,其操作碼、呼叫資料、記憶體、儲存與退款規則會隨分叉變動;它不直接等同 CPU 指令數、位元組數或交易數。

Fusaka 後,以太坊主網用戶端協調採用的基準是每區塊 60,000,000 gas,但實際區塊標頭才是權威值,驗證者偏好仍可依目前相對父區塊規則逐步調整上限。EIP-1559 的彈性係數為 2,長期目標因而是 30,000,000 gas;區塊可暫時用滿上限,而父區塊用量超過目標時,下一區塊的基礎費用會上升。EIP-7825 另將使用者交易宣告的 Gas 上限限制為 2^24 = 16,777,216 gas,EIP-7934 則獨立規定 8,388,608 bytes 的 RLP 執行區塊上限。這些數值只適用於特定日期的主網,並非通用 EVM 常數。

運作方式

  1. 固定鏈、網路、區塊雜湊與編號、已啟用分叉、用戶端或 RPC,以及觀察時間。讀取區塊標頭的 gasLimitgasUsedbaseFeePerGas,不要以網站的靜態參數表取代。
  2. 區分區塊 Gas 上限、EIP-1559 Gas 目標、交易宣告的 Gas 上限、交易實際 Gas 使用量與每單位 Gas 價格。也要區分執行 Gas、Blob Gas、RLP 執行區塊位元組數及 L2 特有計量方式。
  3. 依已啟用的 Gas 規則重現交易有效性與執行。納入固有 Gas、呼叫資料、存取清單、記憶體擴展、冷存取與熱存取、儲存寫入、預編譯合約及退款。估算取決於狀態與區塊標籤,並非保證。
  4. 核對區塊容量。加總收據 Gas 使用量,或使用最後一張收據的累計值,確認 gasUsed <= gasLimit,並考量交易順序與狀態相關成本。交易數既不等於 Gas 上限,也不代表固定 TPS。
  5. 正確套用 EIP-1559。彈性係數為 2 時,目標是 gasLimit / 2;父區塊用量高於目標會提高下一區塊基礎費用,低於目標則會降低。依目前規則,子區塊上限還必須位於相對父區塊約 1/1024 的嚴格範圍內。基礎費用為需求定價,上限則約束可接受的執行工作量。
  6. 檢查運作邊界。即使區塊仍有 Gas 空間,超過已啟用單筆上限的交易也無效;即使總 Gas 低於上限,過大的 RLP 執行區塊同樣無效。未使用的交易 Gas 配額會釋出,退款計數器則是另一個受分叉上限約束的減免機制。REVERT 會保留剩餘 Gas,而頂層執行耗盡 Gas 會回復狀態並用完所提供的執行配額。
  7. 對滿區塊執行時間、狀態成長、區塊傳播、漏塊、鏈重組、建構者與驗證者容量、用戶端多樣性及參數變更進行壓力測試與監控。比較實際區塊與節點指標後,才能將較高上限視為可持續吞吐量。

實例

  • 簡單轉帳上限。60,000,000 gas 上限下,一個區塊理論上可容納 floor(60,000,000 / 21,000) = 2,857 筆普通 ETH 轉帳。30,000,000 gas 目標可容納 1,428 筆;按理想化的 12-second 時槽計算,即 1,428 / 12 = 119 transactions/second。這只是同質交易的上限示例,並非實測 TPS。
  • 混合目標區塊。 假設一個目標區塊包含轉帳 400 * 21,000 = 8,400,000 gas、兌換 80 * 180,000 = 14,400,000 gas,以及合約部署 6 * 1,200,000 = 7,200,000 gas。總用量為 30,000,000 gas,共 486 transactions;依既定時槽假設為 486 / 12 = 40.5 transactions/second。相同 Gas 目標可支援截然不同的交易數量。
  • 交易上限與實際收費。 某交易宣告 200,000 gas,但成功執行時 gasUsed = 146,000。有效價格為 22 gwei 時,費用是 146,000 * 22 = 3,212,000 gwei = 0.003212 ETH;未使用的 54,000 gas 不收費。相較之下,宣告 18,000,000 gas 超過目前 16,777,216 gas 協定上限,無論區塊剩餘容量多少都無效。
  • 基礎費用反應。gasLimit = 60,000,000 時,目標是 30,000,000。基礎費用從 24 gwei 起,父區塊用滿 60,000,000 gas 會使下一區塊基礎費用按最高 12.5% 上升至 27 gwei;空父區塊則使其下降 12.5%21 gwei。這不會改變區塊上限,也不保證下一區塊的使用率。

風險

  • 使用過時的主網 Gas 上限值。
  • 將以太坊參數套用到其他 EVM 鏈或 L2。
  • 混淆區塊上限與 EIP-1559 目標。
  • 混淆區塊上限與單筆交易上限。
  • 混淆交易宣告的 Gas 與實際 Gas 使用量。
  • 將 Gas 視為固定的 CPU、位元組或交易單位。
  • 使用過時的操作碼、呼叫資料或退款規則,或忽略獨立的 RLP 區塊大小上限。
  • 使用 eth_estimateGas 時未指定預期狀態與區塊標籤。
  • 忽略狀態相關執行與交易順序。
  • 混淆未使用的交易配額與獨立的退款計數器。
  • 忽略執行耗盡 Gas 或回復時仍須支付的 Gas。
  • 將執行 Gas 與 Blob Gas 當成同一資源。
  • 僅以同質轉帳推導 TPS。
  • 忽略漏塊、鏈重組與最終性延遲。
  • 增加最壞情況下的區塊執行與傳播時間。
  • 加快狀態成長並提高封存需求。
  • 提高驗證者、建構者與 RPC 的硬體需求。
  • 增加中心化或用戶端分歧風險。
  • 漏掉驗證者偏好、用戶端預設值或分叉變更。
  • 將更高容量誤認為費用或需求必然降低。

常見誤解

  • 區塊 Gas 上限是固定且通用於以太坊或 EVM 的常數。
  • 60,000,000 gas 上限表示每個區塊都應使用 6,000 萬 Gas,或 EIP-1559 目標也是 6,000 萬。
  • 將區塊上限除以 21,000 就能得到鏈的真實 TPS。
  • 只要區塊有空間,單筆交易就能用完整個區塊;目前單筆上限是獨立約束。
  • 提高 Gas 上限會自動降低費用,而無須承擔節點、狀態、傳播、需求或中心化方面的權衡。

相關主題

資料來源

導覽

搜尋知識庫...