﻿---
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-cn/crypto/mempool/)
- [Gas 费用](/zh-cn/crypto/gas-fee/)
- [账户 nonce](/zh-cn/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-cn/crypto/mempool-replacement/index.mdx
