交易失败

能量不足OUT_OF_ENERGY:波场转账失败的原因与处理

能量不足OUT_OF_ENERGY:波场转账失败的原因与处理

简单说:能量不足OUT_OF_ENERGY 表示这次合约调用需要的能量,超过了你能提供的上限,交易被判失败。上限取决于你地址上的能量、可燃烧的 TRX 余额以及 fee_limit。失败后 USDT 不会转出,但可用的能量预算会被全部消耗。按 2026-10-21 参数,一笔 USDT 转账需约 64,285 至 130,285 能量,准备够了再重发。

OUT_OF_ENERGY 到底是什么意思?

波场上的 USDT 是 TRC20 合约代币,每次转账都要在波场虚拟机里执行一段合约代码。执行代码消耗的是“能量”。发起交易时,网络会给这次执行划定一个能量预算,由三部分共同决定:

  • 你地址上现有的能量(自己质押获得的,或别人代理给你的);
  • 能量不够时可以燃烧的 TRX,价格是 100 SUN 一点;
  • 交易里设置的 fee_limit,即你愿意为能量最多花多少 TRX,主网当前上限为 15,000 TRX。

合约执行过程中如果把预算用完了还没跑完,就会以 OUT_OF_ENERGY 结束。波场开发者文档的智能合约错误说明写得很清楚:此时状态变更回滚,但这次执行可用的全部能量预算仍然算作已消耗。

要知道一笔转账正常需要多少能量,可以先看转 USDT 需要多少能量。

为什么会出现能量不足?

把常见原因按出现频率排一下:

原因典型表现怎么确认
收款方从未持有 USDT平时转账正常,换了个新客户就失败在 Tronscan 查对方地址有没有 USDT 记录
租的能量数量不够租了约 6.5 万,转给新地址需要约 13 万看失败交易实际消耗的能量
租期已过或已被用掉下单很久之后才转账,或连续转了两笔查地址当前剩余能量
TRX 余额太少没有能量,余额只有几个 TRX余额 ÷ 0.0001 是否小于所需能量
fee_limit 设得太低脚本或某些工具里手动填了很小的值在交易详情里查看费用上限

第一条最容易被忽视。合约给一个从未持有 USDT 的地址记账时,需要开辟新的存储,能量消耗大约是普通转账的两倍。你不需要更改任何设置,只是因为收款方变了,同样的钱包、同样的余额,结果就从成功变成失败。

失败的交易扣了多少?怎么算?

举一个真实场景的算法。你的地址上有租来的 20,000 能量,TRX 余额 3 个,fee_limit 设得足够大,现在要给一个新地址转 USDT,需要约 130,285 能量:

  1. 可用预算 = 20,000 + 3 ÷ 0.0001 = 20,000 + 30,000 = 50,000 能量;
  2. 50,000 小于 130,285,执行到一半预算耗尽,交易以 OUT_OF_ENERGY 失败;
  3. 结果:20,000 能量用光,3 TRX 被燃烧,USDT 一个也没转出去。

再看另一种:没有任何能量,余额 10 TRX,转给已持有 USDT 的地址,需要约 64,285 能量,燃烧约 6.43 TRX 即可完成,余额足够,交易成功。同样的余额,转给新地址则需要约 13.03 TRX,就会失败,而且 10 TRX 中可用于能量的部分会被耗光。

第三种情况出现在程序转账里:地址上没有能量,余额有 100 TRX,但 fee_limit 只设了 5 TRX。转给老地址需要燃烧约 6.43 TRX,超出上限,交易同样以 OUT_OF_ENERGY 失败,烧掉的正好是这 5 TRX。余额再多也没用,因为 fee_limit 把可用预算卡死了。

可以把这三个因素理解成一个“木桶”:能量、余额、fee_limit 里最短的那块板,决定了这次能执行多远。只要其中一项不够,交易就会在中途停下。

这也是为什么在钱包提示“余额可能不足”时,不建议抱着试一试的心态硬发。资源模型的完整规则见资源支付说明。

怎么在 Tronscan 上确认是 OUT_OF_ENERGY?

  1. 在钱包的交易记录里复制交易哈希;
  2. 打开 Tronscan,粘贴哈希搜索;
  3. 查看交易结果:失败的交易会标为失败,结果字段显示 OUT_OF_ENERGY;
  4. 查看资源消耗:能看到这次消耗了多少能量、燃烧了多少 TRX、用了多少带宽;
  5. 确认代币转移记录为空,说明 USDT 没有离开你的地址。

有些钱包在交易记录里只显示“失败”两个字,不给具体原因,所以一定要到浏览器里看原始结果。顺便记下这次实际消耗的能量数字,它就是下次需要准备的参考值:如果失败交易已经消耗了 5 万能量还没执行完,说明这笔转账至少需要比 5 万更多的能量,大概率是转给了新地址。

如果结果显示的是 REVERT,那是合约主动拒绝,常见原因是 USDT 余额不足或地址受限,与能量无关,只收失败前用掉的能量。其他错误类型可以对照波场交易失败原因汇总。如果交易显示成功,但对方说没收到,那是另一类问题,见USDT 显示成功但没到账。

重新转账前,怎么准备才不会再失败?

先判断收款方,再决定准备多少资源:

收款方情况建议准备的能量或者准备的 TRX(无能量时)
已持有 USDT不少于约 65,000不少于约 7 TRX
从未持有 USDT不少于约 131,000不少于约 14 TRX
不确定按约 131,000 准备按约 14 TRX 准备

表格中的 TRX 数量已包含约 0.35 TRX 的带宽余量。动态能量机制会根据合约的使用热度调整消耗,上限可达基础值的 3.4 倍,所以实际数字会有波动,以钱包发送前的预估为准,宁多勿少。

准备方式有两种:一是往地址里补 TRX,让网络燃烧;二是在转账前租用足量能量,例如通过租用能量页面按收款方情况选择数量。租能量时注意租期,下单后尽快转账。如果你同时缺 TRX 和能量,钱包会直接提示余额不足,处理方法见TRX 不足无法转账。

准备好之后,重新发起一笔新的转账即可。失败的那笔不会“自动重试”,也不会在之后某个时间突然成功,不必担心重复扣款。

怎样从根本上避免再遇到 OUT_OF_ENERGY?

一次失败损失的往往是几个到十几个 TRX,频繁转账的人一个月下来可能就是一笔不小的开销。养成下面几个习惯,基本可以杜绝:

第一,转账前看一眼收款方。 在 Tronscan 上搜索对方地址,看“代币”里有没有 USDT 记录。没有的话,按新地址的能量准备。这一步只需要十几秒,却能避免最常见的失败原因。

第二,看清钱包的预估。 TokenPocket、imToken、TronLink 在确认页面都会显示预计消耗的能量或 TRX。如果预估的燃烧量高于你的余额,或者钱包提示资源不足,先补足再发,不要指望“也许够”。

第三,租能量时按“最坏情况”下单。 转给老地址租约 6.5 万,转给新地址或不确定时租约 13.1 万。两者的差价,通常远小于一次失败燃烧掉的 TRX。

第四,租完尽快转。 短租的能量有时效,过期后会被收回。下单与转账之间隔得太久,到时能量可能已经不在地址上了。

第五,连续转账时逐笔准备。 一份约 6.5 万的能量只够一笔普通转账。连续转两笔时,第二笔会因为能量已被第一笔用掉而失败。批量转账更适合按笔数一次准备足量能量,或使用能自动补充能量的方案。

用脚本或 API 转账时,fee_limit 怎么设?

如果你是商户或开发者,通过程序批量转 USDT,OUT_OF_ENERGY 往往出在 fee_limit 上。常见错误是沿用早期的固定值,没有考虑新地址和动态能量带来的上涨。文档建议先预估能量,再据此设置 fee_limit。

一个稳妥的做法是:发送前调用常量调用接口预估本笔所需能量,乘以 100 SUN 得到燃烧上限,再留出一定余量作为 fee_limit。例如预估 130,285 能量,对应 13,028,500 SUN,可以设为 15 至 20 TRX。fee_limit 只是上限,并不会多扣,实际只按消耗计费;但它设得太低,就会在执行中途被截断,前面消耗的能量全部浪费。

下一笔转账,用租来的能量

当前 65,000 能量 1 小时: 3.15 TRX. 能量几秒到你的地址,无需私钥。

打开机器人

购买能量 · 计算器

常见问题

OUT_OF_ENERGY 失败后,USDT 转出去了吗?

没有。合约执行失败时,所有状态变更都会回滚,USDT 仍在你的地址里。但这次交易消耗的能量和燃烧的 TRX 不会退回。

为什么交易失败了还扣手续费?

按波场文档,OUT_OF_ENERGY 时,这次执行可用的全部能量预算都会被计为已消耗。网络已经替你执行了合约,只是执行到一半资源不够,算力成本照样要付。

我明明租了能量,为什么还是 OUT_OF_ENERGY?

最常见的原因是租的数量不够:转给从未持有 USDT 的地址需要约 13 万能量,只租 6.5 万就不够;也可能是租期已过,或者同一时段已经用掉了一部分。

OUT_OF_ENERGY 和 REVERT 有什么区别?

OUT_OF_ENERGY 是资源不够,可用能量预算会被全部消耗;REVERT 是合约主动拒绝,例如代币余额不足,只收取失败前实际用掉的能量。

重新发送之前需要做什么?

先在 Tronscan 上确认上一笔确实失败、USDT 未转出,再根据收款方是否持有 USDT 准备约 6.5 万或 13.1 万能量,或者足够燃烧的 TRX,然后重新发起一笔新的转账。