跳到正文

Mempool 與交易池

從節點本機視角介紹以太坊交易准入、待執行與 nonce 缺口排隊、傳播、費用資格、替換、私有委託流、納入、逐出和重組。

更新於

僅供教育參考,不構成交易或安全建議。Mempool 視圖屬於節點本機狀態,變動頻繁且取決於政策;在把交易視為已接受或已完成前,請核對特定鏈、用戶端、nonce、費用上限、提交路徑、收據和最終性。

直接答案

Mempool(即交易池)是節點暫時保存在記憶體中、有時也持久寫入磁碟的一組已簽章交易;這些交易已按節點目前的驗證和政策規則獲准進入,但尚未進入該節點認定的規範鏈。它不是共識物件、全網統一佇列或納入承諾。兩個誠實節點也可能持有不同交易,因為它們收到的 gossip 不同、使用不同用戶端或設定、經歷過重新啟動或逐出,或者採用不同的公開與私有提交路徑。

在以太坊執行用戶端中,具有帳戶下一個 nonce、可立即執行的交易通常稱為 pending;被 nonce 缺口阻塞的較高 nonce 交易通常稱為 queued。這些是用戶端介面標籤,並非最終的協定狀態。交易可能在准入前被拒絕、被傳播、被同一發送者和 nonce 的另一筆已簽章交易替換、被逐出、被捨棄、成功納入、納入後回復,或者在重組後重新進入候選範圍。

1
建立

錢包填入目標、金額、費用參數,以及已花費輸入或 nonce 等防重放資料,並建立交易。

運作機制

  1. 鎖定環境:鏈 ID、執行用戶端及版本、目前鏈頭和基礎費、交易類型、發送者、nonce、轉移價值、calldata、gas 上限、費用上限和提交路徑。區分公開 gossip、私有中繼或建構者,以及 ERC-4337 UserOperation 路徑;它們並不共用一個通用交易池。
  2. 解碼已簽章位元組並執行准入前檢查。驗證簽章與發送者、鏈 ID、類型與編碼、固有 gas、nonce 關係、足以涵蓋轉移價值與最大費用曝險的餘額、費用欄位,以及所需的 blob sidecar。此處的拒絕不是 EVM REVERT,通常不會產生收據或鏈上費用。
  3. 描繪本機交易池政策。記錄用戶端把交易歸為 pending 還是 queued、單一帳戶和全域容量、最低費用篩選器、存續期、本機帳戶豁免、替換加價和持久化行為。Geth 的旗標和預設值只描述 Geth,並非以太坊共識或每家服務提供者的規則。
  4. 觀察傳播,但不要虛構全網統一視圖。對照多個獨立節點上的原始交易雜湊與已簽章位元組,但缺少狀態有多種解釋:節點可能尚未收到、按本機政策拒絕、已經逐出,或不公開其交易池。私有路徑可以繞過公開 gossip,同時把交易交給路徑營運者和建構者查看。
  5. 在候選區塊上評估納入資格和排序。對於 type-2 交易,執行 gas 價格為 min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas);若基礎費超過最高費用,該交易在此上限下不具備納入資格。nonce 相依性、gas 與 blob 限制、狀態有效性、建構者 bundle 和 MEV 的影響可能大於首次可見時間。
  6. 主動管理生命週期。等待,或只在確認活躍鏈、發送者和替換政策後,提交有明確依據的同 nonce 替換交易。傳給自己的同 nonce 轉帳也只是一筆替換候選,並不是取消原語。不要因為某個區塊瀏覽器不再顯示原交易就重複發送價值轉移。
  7. 依據共識狀態完成對帳。保存每個已簽章雜湊及替換脈絡,再按所需確認或最終性層級檢查規範收據、區塊雜湊、狀態、gas 使用量、事件紀錄、已消耗 nonce 以及帳戶或合約狀態。若重組移除區塊,仍然有效的交易可能返回部分本機交易池,但具體行為取決於用戶端與狀態。

計算範例

  • 費用上限資格。 某 type-2 轉帳的 gasUsed = 21,000baseFeePerGas = 32 gweimaxPriorityFeePerGas = 3 gweimaxFeePerGas = 34 gwei。實際價格為 min(34, 32 + 3) = 34 gwei,所以實際小費為 2 gwei。費用是 21,000 * 34 = 714,000 gwei = 0.000714 ETH,其中 0.000672 ETH 是被銷毀的基礎費,0.000042 ETH 是小費。若候選區塊基礎費升至 35 gwei,則 34 gwei 上限不足以在該區塊納入。
  • Nonce 缺口。 帳戶的規範 nonce 為 10。某本機交易池收到 nonce 為 1012 的交易,但沒有 11;它可以把 10 歸為 pending,把 12 歸為 queued。nonce 10 納入後,規範 nonce 變為 11,而 12 仍被阻塞,直到有效的 nonce 11 交易被納入。在交易池中看到 nonce 12 並不代表它可以獨立執行。
  • 取決於政策的替換。 在某教學 Geth 設定下,txpool.pricebump = 10,舊交易的 maxFeePerGas = 40 gweimaxPriorityFeePerGas = 2 gwei。按 10% 加價計算的替換門檻為 44 gwei2.2 gwei。提出 43 gwei3 gwei 仍可能被拒絕,因為其中一個上限未達所設定的加價;44 gwei2.2 gwei 則達到兩項教學門檻。具體整數取整、交易類型和准入邏輯取決於版本,另一節點可能保留不同候選。
  • 不存在全網統一交易池。 節點 A 報告 120,000 個不同交易雜湊,節點 B 報告 100,000 個,交集為 80,000 個。聯集是 120,000 + 100,000 - 80,000 = 140,000;Jaccard 重疊度為 80,000 / 140,000 = 57.1428571429%。只有 A 可見的雜湊有 40,000 個,只有 B 可見的有 20,000 個。兩項數量都不能證明建構者、私有中繼或其餘網路能看見什麼。

風險

  • 在錯誤的鏈 ID 或網路上簽章或廣播。
  • 信任惡意、陳舊或設定錯誤的 RPC 端點。
  • 簽章、交易類型、編碼或 blob sidecar 無效。
  • 餘額不足以涵蓋轉移價值與最大費用曝險。
  • 固有 gas 或 calldata 規則導致准入前拒絕。
  • nonce 已被使用或過低。
  • nonce 缺口使後續交易繼續排隊。
  • 同 nonce 替換因本機政策判定加價不足而被拒絕。
  • 最高費用低於候選區塊基礎費。
  • 實際優先費過低或資源限制延遲納入。
  • 用戶端、服務提供者、版本或設定政策不一致。
  • 交易池容量、過期、重新啟動或逐出移除交易。
  • peer 傳播不良、日蝕攻擊或選擇性中繼。
  • 私有中繼洩漏、審查、停機或建構者不參與。
  • 公開委託流遭受搶先交易、三明治攻擊或其他 MEV。
  • 建構者重排、bundle 或私有交易改變執行狀態。
  • 模擬結果在納入前失效。
  • 盲目重複提交或遺失替換脈絡。
  • 雖獲交易池接受,但納入後發生 REVERT、gas 耗盡或被捕捉的子呼叫失敗。
  • 重組、最終性混淆,或把 ERC-4337 替代交易池當成一般 txpool。

常見誤解

  • Mempool 是一個全網同步的先進先出佇列。
  • 交易雜湊能證明全網已接受或傳播該交易。
  • Pending 表示已納入、執行成功、不可逆或收款人已入帳。
  • 費用夠高就能保證納入和執行成功。
  • 私有提交路徑會自動保密、抗審查且保證上鏈。

相關主題

來源

導覽

搜尋知識庫...