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

使用ethers调用BSC上的智能合约返回-32603错误如何解决

问题排查与修复方案

你遇到的-32603错误属于EVM JSON-RPC的内部执行错误,通常由合约执行回滚、参数错误或链ID不匹配导致,按以下优先级排查:

1. 核心错误:Chainlink喂价地址与链不匹配

你当前迁移脚本中使用的0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE是BSC主网的BNB/USD喂价地址,但你的合约部署在BSC测试网,测试网对应喂价地址为0x2514895c72f98844e12c4897cae4b565d9887693。
地址不匹配会导致priceFeed.latestRoundData()调用失败,直接触发合约回滚,返回-32603错误。
修复方式:替换迁移脚本中的喂价地址,重新部署合约即可。

2. 前端网络匹配错误

  • 确认你MetaMask当前切换的是BSC测试网(链ID 97),如果链ID不匹配,Contract.networks[networkId]会读取到空值或错误的合约地址,调用直接失败。
  • 建议在前端增加网络校验逻辑,示例代码:
const BSC_TESTNET_CHAINID = "97"
const networkId = await provider.request({ method: 'net_version' })
if (networkId !== BSC_TESTNET_CHAINID) {
  alert("请切换到BSC测试网")
  return
}

3. 增加错误捕获逻辑定位问题

修改你的getPrice函数,增加try catch捕获具体的链上错误信息,方便后续定位,同时对返回的精度值做转换方便正常展示:

const getPrice = async (contract) => {
  try {
    console.log('contract', contract)
    const price = await contract.getPrice()
    console.log('price', price)
    const priceContainer = document.getElementById('price')
    // 返回的price是扩大了1e18倍的数值,做单位转换后再展示
    priceContainer.innerText = ethers.utils.formatUnits(price, 18)
  } catch (err) {
    console.error("调用getPrice失败:", err.message, err)
  }
}

4. 确认合约部署配置

检查truffle的网络配置文件,确认部署时指定的是BSC测试网,且FundMe.json的networks字段下存在链ID为97的条目,对应的合约地址和你在BSC测试网浏览器上的地址一致。


内容的提问来源于stack exchange,提问作者Patric Robert Gutersohn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:04