跳到正文

以太坊 Mempool 交易替換

從用戶端本機視角介紹同一傳送者、同一 nonce 的以太坊交易替換,包括費用上限調升、取消競速、Blob 交易、私有路徑、收據與最終性。

更新於

僅供教育參考,不構成交易或安全建議。替換與取消是取決於競速結果、用戶端及提交路徑的操作;在認定原交易已被取代前,請核對鏈、傳送者、nonce、已簽署承載資料、費用欄位、收據與最終性。

直接答案

以太坊交易替換是一項本機交易池策略:節點可以優先保留一筆新簽署交易,而不再保留來自同一傳送者且具有相同 nonce 的另一筆候選交易。它不是共識層的全域費用替換開關。某個節點接受新雜湊,不會從其他節點、私有中繼或建構者處刪除舊的已簽署交易;只有交易納入規範鏈後,才會決定哪一筆候選交易耗用帳戶 nonce。

錢包的「加速」操作通常保留原交易的目的地址、金額和 calldata,只提高費用欄位。公開交易池中的「取消」通常建立一筆傳送者與 nonce 相同、金額為零的自我轉帳。它是一筆競爭交易,而不是復原操作:若原交易先被納入,其轉帳或合約呼叫不會被逆轉。特定產品的私有路徑可以定義不同的取消 API;例如 Flashbots Protect 記載了一種不上鏈的身分驗證取消機制,不能將其泛化為公開以太坊交易替換。

運作方式

  1. 鎖定正確譜系:鏈 ID、用戶端及版本、鏈頭區塊與基礎費、提交路徑、傳送者、規範帳戶 nonce、原始已簽署位元組、交易雜湊與類型。查詢多個相關的公開或私有視圖;錢包標籤或單一 RPC 回應不是全域狀態。
  2. 準確劃分原交易狀態:准入前被拒絕、在本機 pending、因 nonce 缺口而 queued、已丟棄或逐出、透過私有路徑提交、成功納入、以 status = 0 納入、因重組被移除,或已經最終確認。一旦 nonce 在規範鏈上被耗用,就不應再把替換視為可用方案,但重組可能重新開啟競速。
  3. 定義新交易意圖。加速交易應重現每個預期語意欄位;公開取消嘗試通常使用相同傳送者與 nonce,並設定 to = sendervalue = 0 和空 calldata。簽署前逐項比較鏈 ID、類型、目的地址、金額、calldata、存取清單、gas 上限、Blob 雜湊與授權。
  4. 讀取目標節點的實際替換策略。Legacy 與 type-1 交易使用 gasPrice;type-2 交易包含 maxFeePerGasmaxPriorityFeePerGas;type-3 交易還包含 maxFeePerBlobGas 並需要 sidecar。Geth 目前普通交易池預設 txpool.pricebump = 10、Blob 交易池預設 blobpool.pricebump = 100,它們只是 Geth 的設定範例,並非以太坊全網常數。
  5. 將調升資格與資金要求分開計算。對於 type 2,實際價格為 min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas)。候選交易仍須編碼有效、固有 gas 充足,且餘額足以涵蓋轉帳金額與最高費用曝險;提高上限不能修復無效 calldata,也不能保證 EVM 執行成功。
  6. 有計畫地提交並保存每項回應。公開重新廣播可能暴露意圖並招致 MEV;私有中繼各有不同的可見性、取消方式、建構者涵蓋範圍與可用性。沿每條路徑追蹤新舊雜湊,不要假定本機接受代表競爭交易已被刪除,也不要盲目送出第三筆帶有金額的候選交易。
  7. 依規範鏈核對勝出交易。按所需最終性層級核對收據區塊與雜湊、交易索引、status、gas 使用量、實際 gas 價格、日誌、傳送者 nonce、餘額及合約狀態。依證據將落選雜湊記錄為已替換、已丟棄或仍可觀察;發生重組後重新分析。

計算範例

  • 普通 type-2 教學調升。 舊候選交易的 maxFeePerGas = 40 gweimaxPriorityFeePerGas = 2 gwei。在調升幅度為 10% 的 Geth 教學設定下,算術門檻為 44 gwei2.2 gwei44/2.1 gwei 的候選交易未達優先費門檻;44/2.2 gwei 則達到兩項教學門檻。基礎費為 32 gwei、gas 使用量為 21,000 時,實際價格為 34.2 gwei,總費用為 718,200 gwei = 0.0007182 ETH,其中基礎費銷毀 0.000672 ETH,優先費為 0.0000462 ETH。實際准入仍取決於具體實作、版本及以 wei 為單位的整數取整。
  • 基礎費敏感度。 某替換交易的兩項上限為 66/4.4 gwei。基礎費為 60 gwei 時,實際價格為 min(66, 60 + 4.4) = 64.4 gwei。基礎費為 65 gwei 時,實際價格為 66 gwei,實際優先費僅為 1 gwei。基礎費為 67 gwei 時,由於 66 < 67,即使候選交易通過本機調升測試,該費用上限也使其無法納入該區塊。
  • 取消競速。 nonce 為 20 的原交易向商家傳送 5 ETH。若它以 21,000 * 42 gwei = 0.000882 ETH 的費用率先勝出,商家會收到 5 ETH,取消交易則變為 nonce 過低。若金額為零的自我轉帳以 21,000 * 45 gwei = 0.000945 ETH 的費用率先勝出,它會耗用 nonce 20,使原交易之後無法進入同一條規範歷史。僅憑點選「取消」按鈕,無法預先確定結果。
  • Blob 交易池邊界。 舊 type-3 候選交易的執行費用上限為 100 gwei、優先費上限為 3 gwei、Blob 費用上限為 20 gwei。在調升幅度為 100% 的 Geth Blob 交易池教學設定下,算術門檻為 200/6/40 gwei200/6/39 gwei 的候選交易未達 Blob 上限;200/6/40 gwei 達到全部三項教學門檻,但仍須具備有效 sidecar、nonce、餘額並通過交易池准入。這些數值並非普通交易或其他用戶端的規則。

風險

  • 選錯鏈 ID 或網路。
  • 選錯傳送者或帳戶 nonce。
  • 使用過時的鏈頭區塊、基礎費或規範 nonce。
  • 在原交易已納入或最終確認後仍嘗試替換。
  • 將普通交易池規則用於 ERC-4337 UserOperation
  • 假定另一用戶端、服務供應商、版本或設定採用相同策略。
  • 因以 wei 為單位的整數取整而未達調升門檻。
  • 只提高一項必要的 EIP-1559 費用欄位。
  • maxFeePerGas 設得低於候選區塊基礎費。
  • 忽略 Blob 費用上限、sidecar 或 Blob 交易池特殊規則。
  • 餘額不足以涵蓋金額與最高授權費用。
  • 簽章、類型、編碼、固有 gas 或鏈域無效。
  • 意外更改目的地址、金額、calldata、存取清單或 Blob 雜湊。
  • 公開取消交易在納入競速中落敗。
  • 舊交易仍存在於其他節點或建構者輸入中。
  • 私有中繼洩漏、審查、丟棄提交或無法取消。
  • 公開重新廣播將意圖暴露給搶先交易、三明治攻擊或其他 MEV。
  • nonce 缺口阻塞後續交易,或引發重複轉帳。
  • 替換交易雖被納入,卻回復或耗盡 gas,同時仍耗用 nonce 與費用。
  • 重組、最終性或收據譜系錯誤使候選交易復活或被錯誤分類。

常見誤解

  • 費用較高的候選交易會在全網刪除舊交易。
  • 任何兩筆數值 nonce 相同的交易都會互相替換,即使傳送者不同。
  • 錢包的「取消」按鈕可以逆轉已經納入的交易。
  • 某個節點接受替換交易,就證明建構者會將其納入。
  • 通用的 10% 調升規則適用於所有用戶端、Blob 交易、私有中繼及 UserOperation

相關主題

資料來源

導覽

搜尋知識庫...