﻿---
title: "以太坊 Mempool 交易替換"
description: "從用戶端本機視角介紹同一傳送者、同一 nonce 的以太坊交易替換，包括費用上限調升、取消競速、Blob 交易、私有路徑、收據與最終性。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 以太坊 Mempool 交易替換

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

<a id="answer"></a>

## 直接答案

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

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

<a id="mechanism"></a>

## 運作方式

1. 鎖定正確譜系：鏈 ID、用戶端及版本、鏈頭區塊與基礎費、提交路徑、傳送者、規範帳戶 nonce、原始已簽署位元組、交易雜湊與類型。查詢多個相關的公開或私有視圖；錢包標籤或單一 RPC 回應不是全域狀態。
2. 準確劃分原交易狀態：准入前被拒絕、在本機 pending、因 nonce 缺口而 queued、已丟棄或逐出、透過私有路徑提交、成功納入、以 `status = 0` 納入、因重組被移除，或已經最終確認。一旦 nonce 在規範鏈上被耗用，就不應再把替換視為可用方案，但重組可能重新開啟競速。
3. 定義新交易意圖。加速交易應重現每個預期語意欄位；公開取消嘗試通常使用相同傳送者與 nonce，並設定 `to = sender`、`value = 0` 和空 calldata。簽署前逐項比較鏈 ID、類型、目的地址、金額、calldata、存取清單、gas 上限、Blob 雜湊與授權。
4. 讀取目標節點的實際替換策略。Legacy 與 type-1 交易使用 `gasPrice`；type-2 交易包含 `maxFeePerGas` 和 `maxPriorityFeePerGas`；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、餘額及合約狀態。依證據將落選雜湊記錄為已替換、已丟棄或仍可觀察；發生重組後重新分析。

<a id="example"></a>

## 計算範例

- **普通 type-2 教學調升。** 舊候選交易的 `maxFeePerGas = 40 gwei`、`maxPriorityFeePerGas = 2 gwei`。在調升幅度為 `10%` 的 Geth 教學設定下，算術門檻為 `44 gwei` 與 `2.2 gwei`。`44/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 gwei`。`200/6/39 gwei` 的候選交易未達 Blob 上限；`200/6/40 gwei` 達到全部三項教學門檻，但仍須具備有效 sidecar、nonce、餘額並通過交易池准入。這些數值並非普通交易或其他用戶端的規則。

<a id="risks"></a>

## 風險

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

<a id="misconceptions"></a>

## 常見誤解

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

<a id="related"></a>

## 相關主題

- [Mempool 與交易池](/zh-tw/crypto/mempool/)
- [Gas 費用](/zh-tw/crypto/gas-fee/)
- [帳戶 nonce](/zh-tw/crypto/nonce-crypto/)

<a id="sources"></a>

## 資料來源

- [Transactions](https://ethereum.org/developers/docs/transactions/) - Ethereum.org（查閱日期：2026-08-13）
- [EIP-1559: Fee market change for ETH 1.0 chain](https://eips.ethereum.org/EIPS/eip-1559) - Ethereum Improvement Proposals（查閱日期：2026-08-13）
- [txpool Namespace](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-txpool) - go-ethereum（查閱日期：2026-08-13）
- [Command-line Options](https://geth.ethereum.org/docs/fundamentals/command-line-options) - go-ethereum（查閱日期：2026-08-13）
- [eth_sendRawTransaction](https://ethereum.github.io/execution-apis/api/methods/eth_sendRawTransaction/) - Ethereum Execution APIs（查閱日期：2026-08-13）
- [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844) - Ethereum Improvement Proposals（查閱日期：2026-08-13）
- [ERC-4337: Account Abstraction Using Alt Mempool](https://eips.ethereum.org/EIPS/eip-4337) - Ethereum Improvement Proposals（查閱日期：2026-08-13）
- [Cancellations](https://docs.flashbots.net/flashbots-protect/cancellations) - Flashbots Documentation（查閱日期：2026-08-13）

Source: https://wiki.fcontext.com/zh-tw/crypto/mempool-replacement/index.mdx
