aurpal

链上交易失败 out of gas 怎么办?常见报错对照

aurpal 编辑组 · 最近更新 2026 年 9 月
aurpal 指南标题卡:链上交易失败 out of gas 怎么办?常见报错对照

第一次在去中心化交易所里换币,点了兑换、钱包提示已提交,几秒后记录却变成红色的 Fail。想换的币没到,BNB 倒是少了一小截。很多人这时的第一反应是再点一次。第二次还是失败,又少一小截。

报 out of gas,是这笔给的燃料上限(gas limit)不够执行完:按钱包建议值调高 gas limit 再发,不是调 gas price;调过一次还失败就停手,可能是合约本身出错。其它报错在下面的对照表里。失败的交易多数留下了原因,只是写在一句不起眼的英文里。找到那一句、认出它属于哪一类,再决定改个设置重发,还是到此为止。交易记录上每个字段是什么意思,BscScan 交易记录怎么看:各字段什么意思 已经讲过,这里不再重复。

报错出在钱包里,还是链上

同样叫「失败」,其实分三种情况,花不花钱差别很大。

第一种大多改完再发不花钱。第二种已经上链、已经付过钱,每重试一次就要再付一次,下面讲的都是这一种。

那句报错写在哪、怎么读

在区块浏览器的交易详情里,Fail 旁边或下方有时会跟着一句英文原文,有的钱包在交易记录里也能点开看到。这句话是合约自己写的。BscScan 解释 Reverted 时说,错误信息可能按合约里的定义附带,所以有的交易有这句,有的没有。没有的时候,只能靠后面几节的其他线索判断。

常见的写法长这样,下面两句都是 PancakeSwap 排障文档里的原文示例:

读的时候先找冒号。冒号前面通常是报错那段合约代码的名字:PancakeRouter 是这家交易所的路由合约,兑换请求先经过它;TransferHelper 是专门转代币的那段代码;以 BEP20 开头的,多半来自代币合约自己。原因写在冒号后面。方括号里的 out of gas 则不是合约写的话,意思是执行到一半燃料烧完了。

把整句复制下来,比截图管用。拿去搜的时候,要精确到这串大写单词,才找得到对应的解释。换一家去中心化交易所,合约名会变,但不少是同一套开源代码改出来的,冒号后面的原因词常常一样。

常见报错对照:改什么再发

表里按报错中出现的关键词排。第三列写的是重发之前该动的地方,写着「先别重发」的,接着看下一节。

报错里的关键词大概发生了什么重发前改什么
out of gas你给的燃料上限(gas limit)不够这笔执行完调高 gas limit,不是调 gas price。钱包一般会给建议值,也可以参考同类成功交易实际用了多少
INSUFFICIENT_OUTPUT_AMOUNT成交时能换到的数量低于你允许的最低值:滑点容差设得太小,或者池子里流动性太少刷新报价,分成小一点的量换;滑点容差只往上加一点
EXPIRED交易生成后没及时签名发出,或者发出去后排队太久,执行时已过截止时间重新发起,报价出来后尽快确认
TRANSFER_FROM_FAILED合约没能从你钱包里把代币划走:余额不够,或者给它的授权额度不够核对余额和授权额度,再按这次要用的数量授权
transfer amount exceeds allowance授权额度比这次要动的数量少补足授权再试
transfer amount exceeds balance余额不够;也可能是这批代币已经被一笔还在排队的交易占着等前一笔出结果,再确认余额
Pancake: K / TRANSFER_FAILED常见于每笔转账自带扣费、或会自动调整余额的代币;也可能是发行方停了交易,只放行部分地址卖出自己买的扣税币:文档的办法是改「To」一栏的数量后马上兑换(K),或只卖七成左右(TRANSFER_FAILED)。空投来的、买得进卖不出的:先别重发
Bad Instruction / Bad Jump Destination合约代码本身出错,和你的设置关系不大;Bad Instruction 出在代币合约上时,可能是这枚币暂时还不允许转账先别重发

第二列按两份说明整理:out of gas 那一行两份都对照了,第二到第七行出自 PancakeSwap 的排障文档,最后一行出自 BscScan。第三列是本站的建议,第五行(授权)和第七行(空投币先别重发)与文档给的办法不完全一样,原因写在下面。两份都在 2026 年 9 月 13 日打开核对过,BscScan 那页自己标的更新日期是 2023 年 10 月 27 日。

授权额度不够那一条,PancakeSwap 文档给的办法是重新授权、而且不设上限。这一步我们不照做:宁可每次按这次要用的量授权、多点一次确认,也不愿让一个合约长期拿着能把这枚币全部划走的许可。授权为什么要小心,BscScan 交易记录怎么看:各字段什么意思 里讲 Success 读反的那段说过。

这几种,别再点重试

有几种失败,换什么设置都成不了,只会一笔一笔接着付钱,哪怕每笔只是一点手续费。

卖不出去的币,尤其是空投来的。买进很顺利,卖出却总是报 TRANSFER_FAILED,先怀疑代币本身。PancakeSwap 文档也提到了这种可能:发行方可能暂停了交易,或者只让指定地址能卖;如果报这个错的代币是空投来的,多半是骗局,不要去授权,也不要点对方给的链接。怎么查一枚币的来路,见 怎么认出假 BNB。

滑点高不一定就是骗局。有些代币每笔转账都要扣一截税,文档里举过一个要把滑点设到 12% 以上才能买的例子。但这类税该在买之前弄清楚,别等卖不出去了才发现。我们自己的做法是:一枚币要把滑点调到两位数才卖得动,就先停手去查合约,不再往上加。

Bad Instruction、Bad Jump Destination。BscScan 把这两类归为合约本身的问题,建议是去联系合约的创建者。你这边改参数,改不了人家的代码。

out of gas 反复出现,调高上限也没用。BscScan 的说明里提到,合约执行出错之后,还可能一直执行下去,直到把 gas 上限耗光。有些看上去是「燃料不够」的失败,底下是合约出了错;上限调得越高,下一笔烧掉的就越多。按钱包建议值调过一次还是失败,就别再往上加了。

重发之前核三样

  1. 钱包里留的 BNB 够不够付手续费。手续费只能用原生 BNB 付,钱包里全是 WBNB 也发不出去,这个坑在 钱包里的 WBNB 是什么 里讲过。平时留多少够用,见 BNB gas 费要留多少?一笔大概多少钱。
  2. 上一笔是不是还挂着。同一个地址发出的交易按编号(Nonce)依次上链,前一笔没出结果,后一笔就得跟着等,还可能出现明明看着有余额、却报「余额不够」的情况。先在交易记录里看有没有 pending 的那一笔。
  3. 这次和失败那次比,到底改了哪一项。数量、授权额度、滑点、gas limit,一项都没动就原样重发,结果大概率还是一样。
失败交易扣掉的那点手续费,已经付给了替你执行这笔交易的网络,链上没有退款按钮,也没有客服能撤回,能省的只有下一笔。私信里自称能帮你「追回失败交易的费用」「解冻卡住的资金」的,一律先按骗局处理。

本文对照的两份原始说明(均为英文):BscScan:交易失败有哪些原因、PancakeSwap:常见报错排障。

本文是一般性科普,不构成投资建议,也不对任何代币的真假下结论。钱包、浏览器和交易所页面上的报错措辞会随版本变动,动手时请看你当时屏幕上的原文。链上交易一旦发出无法撤回,授权和兑换前请核对合约地址与数量。


接着看

BscScan 交易记录怎么看:各字段什么意思 · 钱包里的 WBNB 是什么 · 怎么认出假 BNB · 滑点设太高会多付多少 · gas 费估算(工具)

文中数字只取当天的官方页面并写明日期,拿不准的直说以官方为准。全站唯一一条币安邀请链接在注册教程里。署名:aurpal 编辑组