Python使用Web3查询BSC链代币授权额度始终返回0问题求助
问题排查与修复方案
- 核心错误:授权对象(spender)地址填写错误
你当前代码中_spender参数填的是WBNB的合约地址,但正常代币授权是授予需要调用你代币的目标业务合约(比如Swap路由、流动性池、IDO合约等),而非WBNB地址。你之前给G2代币做授权操作时,肯定是授权给了对应的业务合约,不是WBNB,所以查询给WBNB的额度永远返回0。 - 其余需核对的检查点:
- 确认代码中的
MYADRESS变量值,和你实际完成授权操作的钱包地址完全一致 - 确认你做授权操作时选择的代币合约,和代码中填入的
0x3c7eeddcff188a8c36f1cac1b62958c6e0c27dea地址匹配 - 确认节点连接正常,
print(web3.isConnected())输出为True,避免节点连接异常返回默认0值
- 确认代码中的
修正后代码示例
以下示例以授权给PancakeSwap V2路由为例,你可替换为自己实际授权的业务合约地址:
import json import sys from web3 import Web3 bsc = "https://bsc-dataseed.binance.org/" web3 = Web3(Web3.HTTPProvider(bsc)) # 先校验节点连接状态 assert web3.isConnected(), "BSC节点连接失败" # 要查询的代币合约地址 token_address = web3.toChecksumAddress("0x3c7eeddcff188a8c36f1cac1b62958c6e0c27dea") # ERC20标准allowance方法ABI abi = [ { "constant": True, "inputs": [ {"name": "_owner", "type": "address"}, {"name": "_spender", "type": "address"}, ], "name": "allowance", "outputs": [{"name": "", "type": "uint256"}], "payable": False, "stateMutability": "view", "type": "function", }, ] contract = web3.eth.contract(address=token_address, abi=abi) # 替换为你自己的钱包地址 MYADRESS = "你的实际钱包地址" _owner = web3.toChecksumAddress(MYADRESS) # 替换为你实际授权的目标业务合约地址,示例为PancakeSwap V2路由地址 _spender = web3.toChecksumAddress("0x10ED43C718714eb63d5aA57B78B54704E256024E") allowance_val = contract.functions.allowance(_owner, _spender).call() print(f"当前授权额度:{allowance_val}")
内容的提问来源于stack exchange,提问作者jonny travalto
相关产品推荐
相关产品推荐

