跳到正文

以太坊 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

相关主题

来源

导航

搜索知识库...