You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理MetaMask扩展中的拒绝交易?如何查询未确认交易状态?

1. 如何处理MetaMask扩展中的拒绝交易?

处理待确认交易的拒绝/取消操作很直接,步骤如下:

  • 打开MetaMask扩展,切换到发起该交易的账户
  • 进入「活动」(Activity)标签页,往下滚动找到那条待确认的交易
  • 点击交易进入详情页面,你会看到「取消」或「拒绝」按钮(不同MetaMask版本的按钮文字可能略有差异)
  • 点击按钮后,按照弹窗提示完成操作,这条交易就会被标记为已取消/拒绝,从待处理列表中移除

如果交易是在其他浏览器标签页发起的,你也可以回到发起交易的标签页,很多DApp会在页面上提供取消待确认交易的选项;不过最稳妥的方式还是直接在MetaMask的活动列表里操作。

2. 如何查询未确认交易是已被拒绝还是仍待确认?

分两种场景来说:

普通用户通过MetaMask界面查询

直接看MetaMask的「活动」标签页就够了:

  • 如果交易状态显示为**「待确认」(Pending)**,说明它还在你的本地待确认队列里,没有被拒绝
  • 如果显示为**「已取消」(Cancelled)**或「已拒绝」(Rejected),那就是已经完成了拒绝操作

开发者通过代码查询

如果你是开发DApp,想要通过代码判断状态,可以参考以下方式:

  1. 链上查询:
    用户未确认的交易是不会被MetaMask广播到区块链的,所以你可以用交易哈希调用eth_getTransactionByHash方法:

    const txHash = "你的目标交易哈希";
    const txDetails = await window.ethereum.request({
      method: 'eth_getTransactionByHash',
      params: [txHash]
    });
    
    • 如果返回null:说明这个交易从未被广播,要么是用户拒绝了,要么是用户还没确认(还在MetaMask本地队列)
    • 如果返回的txDetails存在但blockNumber为null:这是用户已经确认、正在链上pending的交易,和「待用户确认」不是同一个状态
  2. 监听MetaMask事件:
    你可以监听MetaMask的transactionHash事件,当用户确认交易并发起广播时,这个事件会被触发:

    window.ethereum.on('transactionHash', (hash) => {
      // 这里的hash就是用户确认的交易哈希,说明交易已被确认并广播
    });
    

    如果在合理时间内没有触发这个事件,要么是用户还没确认,要么是已经拒绝了——这种情况下,你可以结合前端的超时提示,引导用户去MetaMask里查看状态。

需要注意:用户未确认的交易只存在于MetaMask本地,链上完全查不到,所以没办法通过链上数据100%区分「未确认」和「已拒绝」,只能通过MetaMask的界面或者前端交互来判断。

内容的提问来源于stack exchange,提问作者Ai Diod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:54:15