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

使用Python发送TRC20 USDT遇FAILED-OUT OF ENERGY错误求助

解决TRC20 USDT转账提示"OUT OF ENERGY"的问题

核心原因解析

"OUT OF ENERGY"的本质不是fee_limit设置不足,而是发送地址没有足够的TRX支付转账所需的能量消耗。波场网络中,TRC20代币转账需要消耗能量(Energy),能量可通过冻结TRX获取,也可直接用TRX抵扣(无冻结能量时,会自动扣除对应TRX支付能量费用)。你必须确保发送地址持有足够的TRX(至少0.1 TRX以上,留作手续费),否则即使调高fee_limit也会失败。

代码优化方案

假设你使用的是tronpy库,基于你的代码给出以下关键优化:

  1. 校验地址格式
    确保receiver_address和sender_address都是波场标准T开头地址,避免使用hex格式地址引发错误。

  2. 添加余额前置校验
    构建交易前检查发送地址的TRX余额,提前规避余额不足问题:

    # 检查发送地址TRX余额(单位:SUN)
    balance = client.get_account_balance(sender_address)
    if balance < 100000:  # 至少保留0.01 TRX作为手续费
        raise ValueError("发送地址TRX余额不足,无法支付能量费用")
    
  3. 显式设置call_value
    TRC20的transfer是non-payable函数,需明确指定call_value=0,避免库默认值引发异常:

    txn = (
        contract.functions.transfer(receiver_address, amount_in_sun)
        .with_owner(sender_address)
        .fee_limit(50_000_000)
        .call_value(0)  # 符合non-payable函数要求,显式设为0
        .build()
        .sign(private_key)
    )
    
  4. 使用完整合约ABI
    替换现有ABI片段为Tronscan上获取的TRC20 USDT完整ABI,避免潜在的函数签名匹配错误。

额外排查要点

  • 查看交易详情中的"Energy Used"和"Energy Limit",确认实际消耗能量是否超出fee_limit对应的额度;
  • 确认发送地址是否冻结了足够TRX获取能量,若无冻结,需保证地址有足够TRX用于自动抵扣能量费用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:07