交易一直 pending 怎么办:加速、取消与 nonce 的处理顺序
交易发出去之后,钱包里那一条一直挂在 Pending,条目下面并排着 Cancel 和 Speed up 两个按钮。两个按钮都是用同一个 nonce 再发一笔去顶替它;卡住的不止一笔时,nonce 最小的那笔不处理,后面的都动不了。
链上操作不可逆,替换一笔 pending 交易不保证成功。以下为机制说明,不是投资建议或安全保证。见免责声明。
pending 的两种样子
同样显示 pending,处境可能完全不同。一种是交易已经广播出去、躺在网络的待处理池里等着被打包,出价偏低的时候它可能等很久。另一种是它压根还没轮到——同一个账户前面还有一笔没处理完,这笔排在后面,gas 给再高也上不去。
分辨方法是把交易哈希粘进对应链的区块浏览器。能查到一条 Pending 记录,说明网络已经知道它了;什么都查不到,可能是还没广播出去、你查错了链,也可能是它已经被节点丢出了待处理池。浏览器上该看哪几行,写在区块链浏览器怎么用:交易状态与八个字段那篇里。
钱包会保留自己提交过的记录,即使这笔已经被节点丢出待处理池。界面上还挂着,网络此刻未必还在等它。
加速做了什么
加速就是把交易重新发一次。MetaMask 帮助页对这个按钮的说明是:让你把同一笔交易再提交一次,只是 gas 费给得更高,这样交易应该能被更快处理。收款地址、金额、调用内容都不变,变的只有出价。
「应该」两个字留了余地。高出价只是让它在待处理池里排得更前,区块里放谁取决于当时全网的竞争,拥堵时加了价照样可能再等。用自定义 nonce 手动发替换交易时,MetaMask 帮助页给的下限是优先费比原交易至少高 10%、最高费用至少高 30%(Gwei 计)。
取消做了什么
取消不是把交易从网络上撤回来——链上没有这个动作。它的实质是用同一个 nonce 再发一笔新交易,抢在原来那笔前面被打包;一旦新的那笔进了区块,旧的就因为 nonce 已被占用而作废。
帮助页的说法是,只有在交易仍处于 pending 时才谈得上尝试取消,已经确认的交易无法逆转。这两句一起读就清楚了:取消要和原交易抢排位。原来那笔在你按下去的同时被打包,替代交易就会晚一步,结果是原交易照常生效。
用来顶替的那笔可以是空的。官方的写法是,这笔交易不必带任何金额,比如发 0 ETH 也可以,重点在于 gas 给得够高、让网络优先处理它。所以取消的成本不是「把钱要回来」,而是为这笔顶替交易付手续费去争一个排位;被顶掉的原交易不上链,也就不收费。
帮助页把取消分成两种方法:一种是在应用里直接点交易条目下的 Cancel,另一种是自己指定 nonce。前者省事,后者在队列堵了好几笔、或者要精确指定顶替哪一笔时才用得上。
按钮的位置要看扩展版本。帮助页写明,MetaMask 扩展 13.30 及以上版本在 Ethereum、Linea、BNB Smart Chain、Arbitrum、Base、Polygon 这几条网络上,交易提交后不再弹出整页结果,而是在侧栏出一条 "Transaction submitted" 提示;点这条提示打开交易详情,交易还在 pending 时,Speed up 和 Cancel 就在详情里。
为什么要从最旧那笔往回处理
nonce 是每笔交易的编号,名字来自 number only used once。同一个账户的交易按这个编号顺序执行,链上不会跳号处理:编号 9 的那笔没有结果之前,编号 10 就排在后面动不了。
这就是前面那第二种 pending。连发三笔,第一笔出价太低卡住,后面两笔看着也是 pending,其实连竞争的资格都没有;这时去加速第三笔毫无意义,堵点在第一笔。
官方在这件事上写得很直接:需要从队列里最旧的那笔待处理交易开始往回做,nonce 9 没有处理掉之前,没法去取消 nonce 10。实际操作就是:找到编号最小的那笔,先把它加速或取消掉,再看后面几笔是不是自己就动了。
顺带一个容易记反的点:失败的交易也会消耗 nonce。一笔上链后回滚的交易占掉了它的编号,不会把编号留给下一笔。
自定义 nonce 与 Smart Transactions
队列里堵着好几笔、或者要精确指定顶替哪一笔时,就得自己填 nonce。nonce 输入框默认不显示,要先打开对应的开关,扩展和手机 App 的开关不在一处。
浏览器扩展:MetaMask 帮助页写的是,在交易确认窗口右上角打开 "Show advanced details"(显示高级详情),才能用同一个 nonce 发替换交易。如果开着 Smart Transactions(智能交易),而这笔交易在 Ethereum Mainnet 或 BNB Smart Chain 上,还得先把它关掉才能改 nonce,路径是 Settings → Transactions;改完 nonce 记得再打开。
手机 App:在 Settings > Advanced 里打开 "Customize transaction nonce"(自定义交易 nonce)。
设置好之后,新建一笔交易、把 nonce 填成要顶替的那个编号、把 gas 出价提上去。前面说过,这笔可以是给自己转 0 的空交易。发出去之后仍然是一次竞争,结果要回到区块浏览器上确认,别只看钱包里的提示语。
以上路径和按钮名称都是 MetaMask 的。别的钱包叫法和做法不一样。换钱包就以它自己的官方帮助页为准,别照搬这里的菜单路径。
什么时候不该动它
已经确认的交易。帮助页写得很清楚:已经确认的交易无法逆转。这时再发一笔同 nonce 的交易不会顶掉任何东西,只会因为 nonce 已被使用而被拒绝。资金要回来只能走对方或平台那条路,链上没有回退按钮。
不是自己账户发的那笔。只有持有私钥的账户能用它自己的 nonce 发交易。别人转给你的、合约代你执行的、或者交易所提币的那笔在路上,你这边既加速不了也取消不了,能做的是找发起方。
跨链桥那种两段式的操作。源链上的那笔只是前半段,后半段在目标链上另外发生。源链交易还没确认时把它取消掉,通常意味着整件事没开始;而它一旦在源链确认,后半段的进度就归桥的流程管,取消源链交易已经无从谈起。这类操作的等待和核对方式,见从交易所提币到钱包:网络、地址与到账核对。
把取消当成撤销权限用的时候。取消一笔还没打包的 approve 交易,和撤销一笔已经生效的额度,是两件事。前者只是让那笔交易不发生,后者要另外发一笔交易去改合约里记着的 allowance。区别见代币授权与撤销:Allowance、Permit 和权限边界。
还有一种情况是不必动:出价本来就不算低、网络只是暂时拥堵,等就行了。同一个 nonce 最终只有上链的那一笔收 gas,加速其实是把这笔的出价往上提,取消则是改为那笔顶替交易付费;出价提得越高,付出去的就越多,为了省十几分钟未必划算。日常交易里各项参数怎么看,写在链上 Swap 操作:额度、报价、滑点与回执那篇。
常见问题
加速或取消,要再付一笔手续费吗?
替代交易是一笔新的链上交易,按它自己的 gas 出价付费。同一个 nonce 最终只会有一笔被打包,没上链的那笔不产生链上费用。实际扣了多少以回执为准,不要把钱包提交前的估算当成结算金额。
一直放着不管,这笔 pending 会自己过期吗?
EVM 交易没有协议层的到期时间,不会到点自动作废。长时间没被打包的交易可能被节点从内存池里丢掉,那样它既不上链也不消耗 nonce,钱包界面未必同步更新。最终状态以区块浏览器上的记录为准。
加速之后还是没打包,能再加速一次吗?
可以。加速的实质就是用同一个 nonce 再发一次,出价更高的那笔接着去竞争,重复做并不冲突。每次加速都要重新确认一笔交易,而同一个 nonce 最终只有被打包的那一笔付链上费用。连着几次都上不去,先回浏览器确认这笔还在待处理池里,再看看前面有没有更旧的一笔挡着——要是有,该先处理的是那一笔。
同一个地址在别的链上的交易,会被这笔卡住吗?
nonce 按账户在每条链上各自计数。以太坊主网上卡住的那笔,不影响同一个地址在其他 EVM 网络上发交易;只有同一条链、同一个账户的后续交易才排在它后面。
本文引用源
- MetaMask 帮助中心《How to speed up or cancel a pending transaction》,2026 年 9 月 · support.metamask.io/manage-crypto/transactions/how-to-speed-up-or-cancel-a-pending-transaction
按钮位置、菜单名称与可用方式会随钱包版本和账户类型变化;其他钱包的做法以各自官方帮助页为准。