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

Python使用Web3查询BSC链代币授权额度始终返回0问题求助

问题排查与修复方案
  • 核心错误:授权对象(spender)地址填写错误
    你当前代码中_spender参数填的是WBNB的合约地址,但正常代币授权是授予需要调用你代币的目标业务合约(比如Swap路由、流动性池、IDO合约等),而非WBNB地址。你之前给G2代币做授权操作时,肯定是授权给了对应的业务合约,不是WBNB,所以查询给WBNB的额度永远返回0。
  • 其余需核对的检查点:
    1. 确认代码中的MYADRESS变量值,和你实际完成授权操作的钱包地址完全一致
    2. 确认你做授权操作时选择的代币合约,和代码中填入的0x3c7eeddcff188a8c36f1cac1b62958c6e0c27dea地址匹配
    3. 确认节点连接正常,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:24:09