交易失败

波场交易失败原因大全:错误代码、扣费规则与处理办法

波场交易失败原因大全:错误代码、扣费规则与处理办法

简单说:波场交易失败原因大致分两类:一类是交易在发出时就被节点拒绝,例如账户未激活、带宽不足、交易过期,这类不扣费;另一类是交易已上链但合约执行失败,例如 OUT_OF_ENERGY、REVERT,已燃烧的 TRX 不退。以 2026 年 10 月 21 日的链上参数计算,一次失败的 USDT 转账最多可能白烧约 6.4 至 13 TRX。

为什么有的失败要扣钱,有的不扣?

理解波场的错误,第一步是分清交易“死”在哪一步。一笔交易从钱包到区块,要经过两道关:

第一道是广播校验。钱包签好名后把交易发给节点,节点会检查签名、账户是否存在、余额够不够付带宽、交易是否过期、是不是重复提交。只要有一项不通过,节点直接拒收,交易根本不会进入区块。这种情况下 Tronscan 上查不到这笔交易的哈希,也不会产生任何费用。

第二道是合约执行。USDT 是部署在波场上的智能合约,转账要在虚拟机里执行一段代码,执行过程消耗能量。交易已经被打包进区块,执行失败时,所做的状态修改会回滚,USDT 不会离开你的地址,但为执行付出的能量和燃烧的 TRX 已经花掉了。在 Tronscan 上能看到这笔交易,状态显示为失败,并附带错误原因。

所以,看到报错先别慌,做两件事:一是复制交易哈希去 Tronscan 搜索;二是看结果栏里的英文代码。搜不到,说明是第一类,问题在发送前;搜得到且显示失败,说明是第二类,钱已经烧了一部分,需要找到原因避免重复。

还有第三种看起来像失败的情况:钱包一直显示“处理中”。波场出块约 3 秒一个,正常转账几秒内就能在 Tronscan 上查到。如果一分钟后仍然查不到,多半是交易没有广播成功,钱包界面只是没有及时刷新。这时不要急着再点一次发送,先刷新余额、按哈希查询,确认原交易确实不存在,再重新发起。

常见的波场错误代码分别是什么意思?

下表汇总了在 TokenPocket、imToken、TronLink 以及各类 SDK 中最常见的提示。钱包界面的中文文案各家不同,但底层代码基本一致。

错误代码或提示出现阶段含义是否扣 TRX处理方向
OUT_OF_ENERGY合约执行能量不够,TRX 也不够燃烧,或超出手续费上限扣,已消耗部分不退补能量或 TRX 后重发
REVERT合约执行合约主动拒绝,例如代币余额不足、地址被冻结扣已消耗的能量检查代币余额和地址状态
BANDWITH_ERROR广播校验带宽不足,且 TRX 不够支付带宽费用不扣补充 TRX 或获取带宽
account does not exist广播校验发送方地址未激活不扣先向该地址转入 TRX
balance is not sufficient广播校验TRX 余额不足以支付转账金额和费用不扣降低金额或充值
TRANSACTION_EXPIRATION_ERROR广播校验交易签名后放置太久,已过有效期不扣重新签名后立即发送
TAPOS_ERROR广播校验交易引用的区块太旧或无效不扣重新构建交易
DUP_TRANSACTION_ERROR广播校验同一笔交易被重复提交不扣用第一次的哈希查结果
SIGERROR广播校验签名与账户权限不匹配不扣检查私钥和账户权限设置
CONTRACT_VALIDATE_ERROR广播校验交易参数不合规,如金额、地址格式错误不扣核对参数后重建

注意 BANDWITH_ERROR 少了一个 D,这是波场代码里的原始拼写,搜索资料时照原样输入更容易找到答案。

OUT_OF_ENERGY 为什么最费钱?

OUT_OF_ENERGY 是 USDT 用户遇到最多、也最心疼的错误。它的意思是:合约执行到一半,能量用完了,系统想用 TRX 燃烧补足,但 TRX 余额不够,或者燃烧金额已经碰到了交易设定的手续费上限(fee_limit),于是执行中止。

先看一笔 USDT 转账正常需要多少能量。2026 年 10 月 21 日在波场主网实测:

场景所需能量无能量时燃烧 TRX带宽(约 345 字节)
收款地址已持有 USDT64,28564,285 × 100 SUN ≈ 6.43 TRX免费额度内为 0,否则约 0.35 TRX
收款地址从未持有 USDT130,285130,285 × 100 SUN ≈ 13.03 TRX免费额度内为 0,否则约 0.35 TRX

这两个数字里分别有 49,635 和 100,635 是动态能量带来的加成:USDT 合约调用量大,波场会对热门合约按倍数加收能量,最高可达 3.4 倍。所以“上个月转一笔用 3 万能量,现在要 6 万多”并不奇怪,网络参数在变。

这里有一个容易忽略的细节:失败交易烧掉的不只是“差的那一部分”。合约从第一行代码开始就在消耗能量,执行到第几步失败,前面所有步骤的消耗都要付费。比如钱包里有 20,000 能量和 2 TRX,转给老地址需要 64,285 能量:先用掉 20,000 能量,剩下的 44,285 需要约 4.43 TRX 才能补足,而你只有 2 TRX,于是 2 TRX 烧完、交易失败。最终的结果是 20,000 能量和 2 TRX 都没了,USDT 一分没动。

如果钱包里只有 3 TRX、没有能量,转给老地址需要烧约 6.43 TRX,合约执行到一半 TRX 就不够了,交易以 OUT_OF_ENERGY 失败,这 3 TRX 基本被烧光,USDT 原封未动。再充值、再转,等于同一笔转账付了将近两次钱。

还有一种情况与余额无关:fee_limit 设得太低。钱包和程序在发起合约调用时会写一个“最多愿意烧多少 TRX”的上限,如果这个上限低于实际需要燃烧的金额,即使余额充足,交易也会在碰到上限时以 OUT_OF_ENERGY 终止。主流钱包会自动估算这个值,自己用 SDK 写转账脚本时则要手动设置,后文会专门讲。

避免它的办法很直接:转账前让地址上有足够的能量。可以自己质押 TRX 获得,也可以按需购买能量,几分钟内代理到你的地址。具体的排查步骤和补救顺序,见能量不足 OUT_OF_ENERGY 错误详解;能量本身的来龙去脉,见波场能量是什么。

为什么有能量还会扣 TRX?

这是 OUT_OF_ENERGY 的“温和版”:交易成功了,但你发现 TRX 少了。原因通常有三个。

一是能量不够这一笔用。 地址上有 65,000 能量,正好够转给老地址;但这次收款方是新地址,需要约 130,285,差的约 65,000 能量由 TRX 燃烧补上,即约 6.5 TRX。很多人只租或只质押“一笔的量”,却没注意收款方不同,消耗会差一倍。判断方法很简单:在 Tronscan 上搜收款地址,如果它的代币列表里没有 USDT,就按新地址准备能量。

二是带宽用完了。 每个已激活地址每天有 600 免费带宽,一笔 USDT 转账约 345 字节,所以一天第二笔起免费带宽就不够了。带宽不足以覆盖整笔交易时,按 1000 SUN 每字节燃烧,约 0.35 TRX。

举例:同一个地址一天给客户转了 5 笔 USDT,第一笔用免费带宽,后 4 笔各烧约 0.35 TRX,合计约 1.4 TRX。金额不大,但如果每天都这样,一个月就是 40 多 TRX,值得单独租用或质押带宽。

三是附加费用。 转账时填写了备注(memo),按 2026 年 10 月 21 日的链上参数,要额外收 1 TRX;账户开了多签,每笔多签交易也额外收 1 TRX。这两项与能量无关,有能量也照扣。

TRX 余额本身不够付这些时,就会出现另一类提示。专门讲这种情况的文章是 TRX 不足无法转账怎么办,里面列出了在不同钱包里补 TRX 的几种做法。

REVERT 是网络问题还是合约问题?

REVERT 的意思是合约自己拒绝了这次调用,与能量多少无关。对 USDT 来说,最常见的原因有:

  • 代币余额不足。 想转 1000 USDT,实际只有 999.5 USDT,比如之前算错了交易所提币后的到账金额。合约检查不通过,直接回滚。
  • 地址被 Tether 冻结。 USDT 合约里有黑名单功能,被列入名单的地址无法转出。如果确认余额足够、地址格式正确,却反复 REVERT,需要考虑这个可能。
  • 调用的不是真正的 USDT 合约。 有些钱包里显示的“USDT”是名字相同的仿冒代币,它们的合约逻辑可能故意让转账失败。真正的 USDT TRC20 合约地址是 TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t。

REVERT 也会消耗能量,只是比 OUT_OF_ENERGY 少,因为合约在检查阶段就退出了。遇到它不要反复重试,每一次重试都在白花能量,先查清余额和地址状态。

判断是不是黑名单问题,可以看两点:一是同一地址转 TRX 是否正常,正常而转 USDT 必定失败,嫌疑就很大;二是查看该地址近期是否卷入过可疑资金往来。被冻结的 USDT 只能由 Tether 处理,任何声称“付费解冻”的第三方都应视为诈骗。

带宽不足、未激活、过期这些广播错误怎么处理?

下面几类错误都发生在广播阶段,交易没有上链,所以不扣钱,但提示往往只有一行英文,会让人一头雾水。

带宽不足(BANDWITH_ERROR):地址当天的免费带宽用完,又没有质押带宽,TRX 余额也不足以按字节燃烧。解决办法是往地址里转一点 TRX,或者获取带宽。带宽的计算方式和获取渠道,见波场带宽是什么。

账户未激活(account does not exist):这是新手最容易误解的一个。很多人以为“地址里已经有 USDT 了,怎么会不存在”。根据波场账户文档,激活账户只有几种方式:收到一笔 TRX、收到一笔 TRC10 代币,或者由其他账户调用创建账户接口。收到 USDT 不会激活地址,USDT 余额只是记录在 USDT 合约里,链上账户本身仍然不存在。

举个例子:你在币安提了 100 USDT 到一个刚在 imToken 里生成的新地址,Tronscan 上能看到这 100 USDT,但想转出时提示账户不存在。这时只要从别的地址转入 1 TRX 左右,地址即被激活,之后才能正常发起交易。注意,激活后这个地址仍然需要能量才能转 USDT,激活只解决“账户存在”的问题,不解决手续费问题。

交易过期与重复提交:

TRANSACTION_EXPIRATION_ERROR、TAPOS_ERROR、DUP_TRANSACTION_ERROR 这三个代码多出现在两种场景:一是用冷钱包或离线签名,签完后隔了很久才广播;二是自己写程序批量转账,网络抖动时重复提交。

波场交易在构建时会引用一个最近的区块,并写入过期时间。签名之后放太久,引用的区块过旧或过期时间已到,节点就会拒收。处理方式都是重新构建、重新签名、立即发送。

重复提交则要特别小心:DUP_TRANSACTION_ERROR 说明第一次提交其实已经到了节点。此时不要换一个新交易再发一次,而是用第一次的哈希去 Tronscan 查结果,否则可能同一笔款付了两次。

签名错误(SIGERROR):普通单签钱包很少见。如果出现,先确认导入的私钥是否对应这个地址;如果地址开过多签,或曾在不明网页上签过“权限更新”,要立刻在 Tronscan 查看账户权限,确认控制权是否还在自己手里。

自己写程序转账,最容易踩哪些坑?

交易所、兑换商、商户系统常用 TronWeb 或其他 SDK 批量转账,错误的来源和普通用户不太一样。下面四个问题最常见:

  1. fee_limit 写死。 几个月前按 3 万能量估算的上限,在动态能量上调后就不够了,交易成批以 OUT_OF_ENERGY 失败。更稳妥的做法是发送前用只读调用估算本次消耗,再加一定余量。
  2. 不区分收款方。 给从未持有 USDT 的地址转账,消耗约为老地址的两倍。程序里先查询收款方的 USDT 余额,为空就按约 13.1 万能量准备。
  3. 超时后盲目重发。 节点响应超时并不代表交易没上链。先按哈希查询,确认失败或不存在后再重建交易,否则会触发 DUP_TRANSACTION_ERROR,更糟的是可能重复付款。
  4. 归集地址未激活。 用户充值地址只收过 USDT 时没有被激活,直接从它向主钱包归集会提示账户不存在。需要先给这类地址转入少量 TRX,再提供能量。

把能量准备和转账拆成两个步骤也很重要:先确认地址上的可用能量达到预期,再签名发送。能量还没到账就发出交易,结果就是按 TRX 全额燃烧。

交易成功了却没到账,算哪种错误?

严格说,这不是交易失败。Tronscan 上状态为成功,意味着 USDT 已经从你的地址转到了交易里写的收款地址。对方说没收到,问题出在交易之外:

现象可能原因核对方法
交易所充值不显示入账需要若干确认,或充值地址已更换在交易所充值记录里按哈希查询
对方钱包看不到对方没有添加 USDT 代币,或看的是其他网络让对方用 Tronscan 搜自己的地址
金额到了别的地址复制地址时被替换,或被地址投毒误导逐字符核对交易里的收款地址
选错网络交易所提币时选了其他链在对应链的浏览器里查哈希

完整的排查清单和与交易所客服沟通的要点,见 USDT 显示成功但没到账。

怎样在五分钟内找到失败原因?

拿到一笔失败交易,不需要任何专业工具,按下面顺序看,大多数情况五分钟内能定位:

  1. 用哈希搜 Tronscan。 搜不到,说明交易没上链,问题在广播阶段,回头看钱包报的英文代码。
  2. 看交易结果。 显示失败的,结果栏会写 OUT_OF_ENERGY、REVERT 等代码,对照上面的表格。
  3. 看资源消耗。 交易详情里列出了消耗的能量、带宽和燃烧的 TRX。如果能量消耗远高于 64,285,说明收款方是新地址或动态加成上调了。
  4. 看发送方地址。 打开自己的地址页,确认 TRX 余额、可用能量、当天剩余带宽。
  5. 看收款地址。 新地址意味着要准备约 13.1 万能量,而不是 6.5 万。
  6. 看代币合约。 确认转的是 TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t,不是同名代币。

排查完这一笔,更重要的是别让下一笔再出错。大部分波场交易失败都可以在发送前避免,把下面这张清单当作转账前的例行检查:

检查项为什么合格标准
发送方地址已激活否则提示账户不存在至少收到过一笔 TRX
能量是否足够否则燃烧 TRX 或失败老地址约 6.5 万,新地址约 13.1 万
TRX 余额支付带宽、备注等附加费用即使有能量,也留 1 至 2 TRX
收款地址防止地址替换和投毒完整逐位核对,不只看首尾
代币合约防止假 USDT与官方合约地址一致
程序里的 fee_limit上限太低会导致执行中止不低于预估燃烧金额并留余量

资源模型的官方说明可以参考波场资源模型文档,其中解释了能量、带宽如何获取和消耗。日常转账最省心的做法,是在每笔 USDT 转账前确认能量到位:频繁转账的地址可以质押或长期租赁,偶尔转一笔则按次租用即可。

最后提醒一点:遇到失败时,任何自称“链上客服”“钱包官方”的人主动私信你、要求提供助记词或让你转账“解锁交易”,都是骗局。波场交易失败的原因全部可以在公开的区块浏览器上查到,排查过程中从来不需要交出私钥。

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

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

打开机器人

购买能量 · 计算器

常见问题

波场交易失败了,手续费会退回吗?

要看失败发生在哪一步。交易被节点直接拒绝、根本没上链的,不扣任何费用;已经上链但合约执行失败的(如 OUT_OF_ENERGY、REVERT),已消耗的能量和燃烧的 TRX 不会退回。

钱包显示“能量不足”,是不是 USDT 已经转丢了?

没有。执行失败的交易会整笔回滚,USDT 仍然在你的地址上,损失的只是这次燃烧的 TRX。补足能量或 TRX 之后重新发起即可。

为什么我有能量,转 USDT 还是扣了 TRX?

最常见的原因是能量只够转给老地址的约 6.5 万,而对方地址从未持有过 USDT,需要约 13.1 万;差额由 TRX 燃烧补上。另一个原因是带宽用完,每笔约烧 0.35 TRX。

account does not exist 是什么意思?

意思是发起交易的地址在链上还没有被激活。只收到过 USDT 的地址并没有激活,需要先收到一笔 TRX(或 TRC10 代币),才能发起任何交易。

交易提示成功,对方却说没收到,算交易失败吗?

链上状态为 SUCCESS 说明转账本身已经完成。没到账通常是地址填错、网络选错、交易所入账延迟或对方查看的是错误代币,需要按到账排查流程逐项核对。