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

如何检查钱包是否已被授权可花费指定token

检查ERC20代币授权状态的实现方案

所有符合ERC20标准的代币合约都内置了allowance查询方法,你可以通过调用该方法确认当前钱包给目标消费合约的授权额度,再决定是否需要执行授权操作,避免重复授权。

实现逻辑

  • 提前准备三个核心参数:
    • 待交易的代币合约地址
    • 你的钱包地址(代币持有人地址)
    • 授权目标合约地址(比如Uniswap路由合约地址)
  • 调用代币合约的allowance(owner, spender)方法,返回值为当前已生效的授权额度,单位为代币的最小精度单位(如USDC为6位、ETH为18位,需和你本次交易的金额单位保持一致)
  • 额度校验规则:
    • 若已授权额度 ≥ 本次交易需要花费的额度:直接跳过授权步骤,执行后续交易逻辑
    • 若已授权额度 < 本次交易需要花费的额度:再执行approve授权操作即可

代码示例(基于ethers v6)

const ERC20_ABI = [
  // 授权额度查询方法
  "function allowance(address owner, address spender) external view returns (uint256)",
  // 授权方法
  "function approve(address spender, uint256 amount) external returns (bool)"
];

// 初始化代币合约实例
const tokenContract = new ethers.Contract(你的代币地址, ERC20_ABI, 钱包签名器实例);
// 查询当前已授权额度
const approvedAmount = await tokenContract.allowance(你的钱包地址, 目标消费合约地址);
// 将本次要交易的金额转换为代币最小精度单位
const needAmount = ethers.parseUnits(本次交易金额, 代币精度);

if (approvedAmount < needAmount) {
  // 额度不足,执行授权
  const approveTx = await tokenContract.approve(目标消费合约地址, needAmount);
  // 等待授权交易上链确认
  await approveTx.wait();
}
// 后续执行交易逻辑

注意:部分非标准ERC20代币(如USDT)存在授权调整限制,当已有授权额度不为0时无法直接修改为新额度,需要先调用approve将额度设置为0,再设置为你需要的目标额度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:27:03