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

Python调用Web3进行BSC交易签名报错:Non-hexadecimal digit found

BSC PancakeSwap代币兑换交易签名报错修复方案

错误原因

  • 核心原因是交易构建参数缺少chainId字段,BSC主网要求交易必须携带chainId=56防止重放攻击,缺失该参数会直接触发签名/节点校验失败。
  • 次要可能性包括:web3.py版本不兼容(v5和v6版本API用法差异大)、硬编码的gas限额不足、地址校验错误、路由合约地址填错。

修复步骤

  1. 交易构建参数新增chainId字段,在buildTransaction的传参字典中添加'chainId': 56。
  2. 替换硬编码gas参数为动态估算值,避免gas不足导致交易失败。
  3. 适配web3.py版本API,如果你使用的是v6及以上版本,将所有驼峰命名的API替换为蛇形命名。

修复后参考代码

import time
from web3 import Web3

PancakeABI = open('pancakeABI','r').read().replace('\n','')
bsc = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc))

# 检查节点连接
if not web3.is_connected():
    raise Exception("BSC节点连接失败")

# 地址转换(v5版本可换回toChecksumAddress)
contract_id = web3.to_checksum_address(tokaddr)
router_address = web3.to_checksum_address(router_address)
sender_address = web3.to_checksum_address(sender_address)

# 余额检查
balance = web3.eth.get_balance(sender_address)
print(f"账户BNB余额: {web3.from_wei(balance,'ether')}")

# 初始化合约
contract = web3.eth.contract(address=router_address, abi=PancakeABI)
nonce = web3.eth.get_transaction_count(sender_address)
swap_amount = web3.to_wei(0.02, 'ether')

# 构建交易
pancakeswap2_txn = contract.functions.swapExactETHForTokens(
    0,
    [web3.to_checksum_address(spend), contract_id],
    sender_address,
    int(time.time()) + 1000000
).build_transaction({
    'from': sender_address,
    'value': swap_amount,
    'gasPrice': web3.eth.gas_price, # 动态获取当前网络gas价
    'nonce': nonce,
    'chainId': 56 # 新增BSC主网chainId
})

# 动态估算gas,失败则使用默认值
try:
    pancakeswap2_txn['gas'] = web3.eth.estimate_gas(pancakeswap2_txn)
except:
    pancakeswap2_txn['gas'] = 300000 # 预留更高的gas限额

# 签名并发送交易
signed_txn = web3.eth.account.sign_transaction(pancakeswap2_txn, private_key=private)
tx_token = web3.eth.send_raw_transaction(signed_txn.rawTransaction)
print(f"交易哈希: {web3.to_hex(tx_token)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:05