DEV Community

drake
drake

Posted on • Edited on

1

Python web3库BSC公链转账USDT



from web3 import Web3
def send_usdt(address, sender_private_key, receiver_address, amount_usdt):
    """
    address: 发送方地址
    sender_private_key: 发送方私钥
    receiver_address:接收方地址
    amount_usdt:发送代币的数量
    """
    # 防止自己转给自己
    if address == receiver_address:
        return
    # 连接到币安智能链节点
    bsc_url = 'https://bsc-dataseed.binance.org/'
    web3 = Web3(Web3.HTTPProvider(bsc_url))

    # 检查连接是否成功
    if web3.is_connected():
        print("Connected to Binance Smart Chain")
    else:
        print("Failed to connect")

    sender_address = web3.to_checksum_address(address)

    # USDT代币合约地址(BEP20)
    usdt_contract_address = '0x55d398326f99059ff775485246999027b3197955'

    # 将地址转换为ChecksumAddress
    sender_address = web3.to_checksum_address(sender_address)
    receiver_address = web3.to_checksum_address(receiver_address)
    usdt_contract_address = web3.to_checksum_address(usdt_contract_address)

    # USDT代币合约ABI(简化版,包含transfer方法)
    usdt_abi = '''
    [
        {
            "constant": false,
            "inputs": [
                {
                    "name": "_to",
                    "type": "address"
                },
                {
                    "name": "_value",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "name": "",
                    "type": "bool"
                }
            ],
            "type": "function"
        }
    ]
    '''

    # 初始化USDT合约
    usdt_contract = web3.eth.contract(address=usdt_contract_address, abi=usdt_abi)
    amount = int(amount_usdt * 10 ** 18)

    # 获取nonce值
    nonce = web3.eth.get_transaction_count(sender_address)

    # 获取当前推荐的Gas价格
    current_gas_price = web3.eth.gas_price
    # 将Gas价格转换为Gwei以便于阅读
    current_gas_price_gwei = web3.from_wei(current_gas_price, 'gwei')
    print(f'当前GASwei: {current_gas_price_gwei}')

    # 构建交易
    tx = usdt_contract.functions.transfer(receiver_address, amount).build_transaction({
        'chainId': 56,  # BSC主网的chainId
        'gas': 40000,  # USDT 正常在40000左右,建议设置上限为200000(确保能正常执行完,否则执行一半,消耗的手续费是不退的)
        'gasPrice': current_gas_price,
        'nonce': nonce,
    })

    # 签名交易
    signed_tx = web3.eth.account.sign_transaction(tx, sender_private_key)

    # 发送交易
    tx_hash = web3.eth.send_raw_transaction(signed_tx.raw_transaction)
    print(f'Transaction sent with hash: {tx_hash.hex()}')

    # 获取交易回执以查看实际使用的Gas量
    receipt = web3.eth.wait_for_transaction_receipt(tx_hash)
    if receipt['status'] == 0:
        print("Transaction failed")
    else:
        print(f'succeeded receipt: {receipt}')

Enter fullscreen mode Exit fullscreen mode

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more