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

使用ethers.js集成智能合约遇问题:无法获取代币合约余额

问题排查与修复方案

1. 代码语法错误

你的代码存在未闭合括号问题,JsonRpcProvider的构造调用没有结束,直接导致语法解析失败。

2. Infura RPC 地址不完整

Infura的RPC URL必须包含项目ID,你目前只写了基础前缀,需要补充从MetaMask复制的完整链接(包含末尾的项目ID)。

3. 未正确调用余额查询逻辑

ERC20代币的余额需通过标准方法balanceOf(address)查询,且该方法为异步操作,需用async/await处理异步逻辑。

修复后的完整代码示例

// 替换为你从MetaMask复制的完整Goerli RPC链接
const provider = new ethers.providers.JsonRpcProvider(
  `https://goerli.infura.io/v3/你的Infura项目ID`
);

// 初始化合约实例(变量名统一用小驼峰更符合JS规范)
const tokenContract = new ethers.Contract(tokenAddress, abiSource.token.abi, provider);

// 异步查询指定地址的代币余额
async function getTokenBalance(walletAddress) {
  try {
    // 调用ERC20标准的balanceOf方法
    const balanceWei = await tokenContract.balanceOf(walletAddress);
    // 将wei单位转换为代币实际单位(根据代币小数位数调整,多数为18位)
    const formattedBalance = ethers.utils.formatUnits(balanceWei, 18);
    console.log("代币余额:", formattedBalance);
    return formattedBalance;
  } catch (error) {
    console.error("查询余额失败:", error);
  }
}

// 替换为要查询的钱包地址,执行查询
getTokenBalance("0x你的钱包地址");

额外检查项

  • 确认tokenAddress是Goerli测试网的有效代币合约地址(0x开头的十六进制字符串)。
  • 确认abiSource.token.abi包含balanceOf方法的定义(ERC20标准ABI默认包含该方法)。
  • 查看浏览器/终端控制台的报错信息,比如合约地址无效、ABI缺失方法、网络连接失败等,根据具体错误进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:18:15