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

调用BSC测试网BEP20合约balanceOf时报execution reverted错误如何解决

错误原因

  • 核心问题:你在标准BEP20合约的balanceOf方法上添加了onlyOwner权限修饰符。标准BEP20协议规定balanceOf为无权限限制的公开查询方法,任何地址都可调用,添加修饰符后只有合约所有者(owner,即部署合约的钱包地址)可以调用该方法。
  • 触发逻辑:你当前的调用代码未指定调用方地址,web3默认使用零地址作为调用方,不满足onlyOwner的权限要求,触发合约校验失败直接回滚,因此返回execution reverted错误。

解决方法

  1. 【推荐方案,符合通用标准】移除balanceOf方法上的onlyOwner修饰符,重新部署合约。保留该权限会导致区块浏览器、第三方钱包等工具都无法正常读取代币余额,不符合BEP20代币的通用兼容要求。
  2. 【特殊需求方案】如果你确实需要限制balanceOf的调用权限,可在调用时指定owner地址作为调用方,代码修改如下:
let Web3 = require('web3');
const fs = require('fs');

let web3 = new Web3('https://data-seed-prebsc-1-s1.binance.org:8545');
// 替换为你部署合约时使用的钱包地址(即owner地址)
const ownerAddress = "你的合约owner地址";
const contractAddress = '0x43045f0Cec750eEb70478B023885d1956588438E';
const contractAbi = JSON.parse(fs.readFileSync("scripts/contract_abi.json").toString())
const contract = new web3.eth.Contract(contractAbi, contractAddress);

// 调用时添加from参数指定owner地址
contract.methods.balanceOf(contractAddress).call({from: ownerAddress})
.then(result=>console.log(result))
.catch(err => console.log(err));
  1. 额外校验项:如果调整后仍报错,可检查本地contract_abi.json是否和部署后的合约ABI完全匹配,ABI不匹配会导致方法调用签名错误,也会触发执行回滚。

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

相关产品推荐
方舟 Agent Plan

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

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