Tx Doctor / EVM 回滚错误库
EVM 交易为什么回滚了?
回滚的原因就那么几种:合约自己的检查没通过、gas 用光、ERC-20 授权或余额不足、成交价超出滑点、或者 nonce 已经被用过。下面每一条都教你如何区分它们——以及真正能解决的做法。
诊断我的交易本工具支持的链
链是由哈希本身判断的,没有选错网络这回事。不支持的链会被明确说明,而不是靠猜。
执行回滚(没有原因字符串)
EVM · reverted — 合约拒绝了这次调用,也没有返回任何信息。通常是无原因的 require()、解码器不认识的 custom error,或调用深处出现 gas 问题。
Gas 不足
EVM · gas — 调用完成前 gas 上限就用完了,EVM 回滚了全部状态——但 gas 照样被扣。
基础 gas 太低
EVM · gas — 你给的 gas 上限小于交易本身的基础成本(21,000 加 calldata),所以在执行前就被拒了。
余额不足以支付 gas
EVM · balance — 发送地址付不起「金额加上按其设定价格计算的 gas」,节点因此拒绝接收这笔交易。
Nonce 太低
EVM · nonce — 这个 nonce 的交易已经上链,节点把新交易当成重复项丢弃了。
替换交易出价太低
EVM · nonce — 你试图替换一笔待处理交易,但新费用不够高——多数节点要求至少高出约 10%。
ERC-20 转账超过余额
EVM · token — 代币合约拒绝了转账,因为发送地址持有的数量少于请求值——常见于带转账税的代币先扣掉了自己那份。
ERC-20 授权额度不足
EVM · token — 路由或合约没有被授权动用这么多代币,transferFrom 因此回滚。
安全转账失败(STF / TF / TransferHelper)
EVM · router — 路由无法从你的钱包拉走代币。Uniswap 系路由报成三个字母 STF(safeTransferFrom 失败)或 TF,PancakeSwap 报…
兑换滑点超限
EVM · DEX — 池子给出的数量低于你的最小输出(或吃掉了超过最大输入),路由拒绝以更差的价格成交并回滚。
兑换已过截止时间
EVM · DEX — 交易在你设定的截止时间之后才被打包,路由拒绝执行。
合约已暂停、冻结或被拉黑
EVM · token — 代币或协议此刻在刻意阻止转账。调费用或重试都没用——限制是合约所有者设的。
Solidity panic(算术或越界错误)
EVM · Panic — 合约触发了编译器插入的 panic:溢出、除零、数组越界读,或 assert() 失败。这是合约侧的问题,不是钱包问题。
未知的 custom error selector
EVM · custom — revert 数据以一个 4 字节 selector 开头,不属于 ERC-20 或 Panic 标准。custom error 由各合约自行定义,这个 selector…