BSC测试网合约地址缺失,调用balanceOf获取BNB余额返回0或报错
问题排查与解决
核心错误:用ERC20合约方法查询原生BNB余额
BNB是BSC链的原生代币,不属于ERC20标准代币范畴,不需要通过合约的balanceOf方法查询余额。你当前调用的合约地址对应某个ERC20代币,查询的是该代币的余额,而非钱包内的原生BNB,所以返回0是正常结果。
正确查询原生BNB余额的方法
直接使用Web3原生的get_balance方法获取,替换代码中的合约调用部分:
# 获取余额(单位:Wei) balance_wei = w3.eth.get_balance(account.address) # 转换为BNB单位(1 BNB = 10^18 Wei) balance_bnb = w3.from_wei(balance_wei, 'ether') print(f"BNB余额: {balance_bnb}")
如果确实要查询ERC20代币余额(非BNB),请检查以下几点
- 合约地址正确性:确认
0xfd5af95C12446b60d23e16A4EA95690cE942e5dC是BSC测试网目标代币的官方合约地址,不要混淆主网与测试网地址。 - ABI匹配性:确保
abi_testnet.json中的ABI与目标合约完全对应,ABI不匹配会导致调用错误或返回异常值。 - 代币持有情况:你的钱包有0.1 BNB,但不一定持有该合约对应的ERC20代币,此时返回0是合理结果。
额外排查项
- 确认RPC节点连接正常:检查代码输出是否为
Disconnected,若连接失败可更换测试网RPC节点(比如https://bsc-testnet.publicnode.com)。 - 助记词准确性:确保
seed变量填入的是你持有BNB的钱包助记词,否则生成的账户地址错误,查询对象不对。 - 钱包网络一致性:确认你的钱包确实连接的是BSC测试网,而非主网,避免地址或余额混淆。
内容的提问来源于stack exchange,提问作者san1rope
相关产品推荐
相关产品推荐

