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

使用Moralis 1inch插件时如何捕获用户拒绝交易的报错

你目前的代码有两个需要调整的点:

  • 异常捕获范围没有覆盖授权操作:Moralis.Plugins.oneInch.approve 调用会触发钱包授权弹窗,用户拒绝授权也会抛出错误,这部分逻辑当前没有被try/catch包裹
  • 捕获逻辑没有区分错误类型:用户拒绝交易的RPC错误码固定为4001,你可以通过这个字段判断对应场景

修复后代码

async function trySwap() {
  try {
    let address = Moralis.User.current().get("ethAddress");
    let amount = Number(fromAmount) * 10**fromTokenDecimals;
    if (tokenSymbol !== "ETH") {
      const allowance = await Moralis.Plugins.oneInch.hasAllowance({
        chain: "eth",
        fromTokenAddress: tokenAddress,
        fromAddress: address,
        amount: amount,
      });
      if (!allowance) {
        await Moralis.Plugins.oneInch.approve({
          chain: "eth",
          tokenAddress: tokenAddress,
          fromAddress: address,
        });
      }
    }
    await doSwap(address, amount);
    alert("兑换完成");
  } catch (error) {
    console.log(error)
    // 判断是否为用户主动拒绝交易
    if (error.code === 4001) {
      alert("您已拒绝本次交易");
    } else {
      // 其他错误场景可根据业务需求扩展
      alert('ETH余额不足')
    }
  }
}

function doSwap(userAddress, amount) {
  return Moralis.Plugins.oneInch.swap({
    chain: "eth",
    fromTokenAddress: tokenAddress,
    toTokenAddress: totokenAddress,
    amount: amount,
    fromAddress: userAddress,
    slippage: 1,
  })
}

补充说明

所有需要用户钱包签名的操作(包括授权、兑换、转账等)都会触发钱包弹窗,只要用户主动拒绝,都会返回code为4001的标准RPC错误,上述修改已经覆盖了授权和兑换两个场景的异常捕获,可以正确捕获用户拒绝的情况并弹出对应提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:00