Reverted 交易是什么 / 怎么读 Revert Reason|从 require 到具体修正

交易 Reverted 是「已上链但合约 require 失败」——Etherscan 会在交易页显示 Revert Reason 字段。本文按 6 步教你看懂常见 10 个 Revert Reason、定位错误源、修正后重发。

发布于 2026-05-08 · 约 7 分钟 · 查交易

Reverted 是什么意思?直接答:Reverted 表示交易已上链但合约里的 requirerevert() 语句被触发——执行被回滚到交易开始前的状态,但 Gas 仍消耗。Etherscan 会显示 Revert Reason 字段(如 "TRANSFER_FROM_FAILED"、"Slippage exceeds maximum")告诉你具体哪行 require 失败。理解 Revert Reason 是修复 Reverted 交易的核心。

如果修复后想完成出金到法币,可顺路准备 币安官网 的实名账号,并用 币安官方App 看充币地址。下载入口在 下载页

Reverted 与 Out of Gas 的区别

A:两者都是 Failed,但触发机制不同

维度 Reverted Out of Gas
原因 合约逻辑判定失败 Gas Limit 设低不够执行
Etherscan 显示 Revert Reason 字段有内容 「Out of gas」
处理 修参数重发 提高 Gas Limit 重发
Gas 损失 实际用掉的 Gas 全部 Gas Limit

第 1 步:看 Revert Reason

复制 TxHash → etherscan.io → 交易页中部「Reverted」红色徽章下方有「Revert Reason」字段。

第 2 步:常见 10 个 Revert Reason

Revert Reason 含义 处理
TRANSFER_FROM_FAILED 授权额度不够或余额不足 重新 approve / 充余额
Slippage exceeds maximum 滑点超限 调高滑点容忍
Insufficient liquidity 池子流动性不够 减小金额或换池
INSUFFICIENT_OUTPUT_AMOUNT DEX 输出不达预期 调最低输出参数
EXPIRED deadline 已过 重新签名(新 deadline)
ERC20: insufficient allowance 授权额度不够 重新 approve
Pausable: paused 合约暂停 等合约恢复
Ownable: caller is not the owner 你不是 owner 不能调
ReentrancyGuard: reentrant call 重入攻击防护 单笔操作
ERC20: transfer to the zero address 发到 0x0 检查地址

第 3 步:用 Tenderly 调试

进入 tenderly.co → 输入 TxHash → Debugger → 单步执行 EVM 看哪行 revert。

A:Tenderly Debugger 是分析复杂 Reverted 的最佳工具——免费版每月 25 次足够。

第 4 步:用 OpenChain 看完整调用栈

openchain.xyz/trace → 输入 TxHash → 显示树状调用——Reverted 节点显示红色,定位到具体哪个 sub-call 失败。详见 BscScan 用法 分类的跨合约调用追踪篇。

第 5 步:实战——3 种典型 Reverted 修复

例 1:Uniswap 兑换被滑点 revert

步骤 操作
1 Etherscan 显示「Slippage exceeds maximum」
2 Uniswap UI 滑点从 0.5% 调到 1-2%
3 或等池子流动性更好时操作
4 重发

例 2:Approve 给智能合约后 transferFrom revert

步骤 操作
1 Revert Reason = ERC20: insufficient allowance
2 检查 Approval Checker 看实际授权额度
3 在代币合约 approve 提高到所需额度
4 再发原交易

例 3:购买 NFT 时 EXPIRED

步骤 操作
1 Revert Reason = EXPIRED
2 该挂单的 deadline 已过
3 重新签名 / 选其他挂单

第 6 步:预防 Reverted

预防 说明
操作前 Tenderly 模拟 看会不会 revert
滑点设合理(0.5-2%) 不极端低
授权额度提前充足 避免 transferFrom
大额前小额测试 1% 先发
检查合约是否暂停 部分协议会主动 pause

OpenChain 上的 4byte 解码

每个调用的 calldata 前 4 字节是 function selector。OpenChain 自动解码为 function 名——可读性极好。

风险提示

Reverted 不会丢资产——Value 退回,只损失 Gas。但反复 Reverted 浪费 Gas——模拟先行,找到根因再重发

如果链上资产想出金,可借助 币安官网 走 C2C。

实操核对清单

  • [ ] 已会看 Etherscan 上 Revert Reason 字段
  • [ ] 知道 10 个常见 Revert Reason 含义
  • [ ] 用 Tenderly Debugger 调试复杂场景
  • [ ] 用 OpenChain Trace 看树状调用
  • [ ] 修参数后再重发
  • [ ] 大额前模拟

一站式回顾

A:Reverted = 合约 require 失败 + Gas 扣 + Value 退核心 4 个动作:看 Revert Reason、查具体含义、修参数、重发。核心 1 个心法:80% Reverted 由滑点 / 授权 / 余额 三类导致——对应处理

如果想了解 Internal Transactions 的解读,下一步建议看 Internal Transactions 篇。

常见问题

Reverted 与 Failed 是一回事吗?

A:Reverted 是 Failed 的子集。所有 Reverted 都是 Failed,但 Failed 不一定都是 Reverted——还可能是 Out of Gas / Underpriced 等。

Revert Reason 有时为空怎么办?

A:合约用 revert() 不带 message 时为空。用 Tenderly Debugger 单步执行能看到具体哪行 revert——比 Etherscan 字段更精确。

Reverted 后再重发同样参数会成功吗?

A:通常不会——根因没解决重发还是失败修复滑点 / 授权 / 余额后再重发

我能不能用 staticcall 模拟避免 revert?

A:能。staticcall 是只读模拟调用——返回 success/fail 但不上链。钱包内置 estimateGas 实际就是用 staticcall 预跑

合约 owner 改了规则导致我交易 revert 怎么办?

A:等 owner 撤回或在 DAO 投票推动改变。owner 单方面改规则的合约本身风险高——下次操作前看合约权限设置。

Etherscan 显示 Reverted 但钱包显示 Success 是怎么回事?

A:钱包暂未同步。钱包通常 30 秒-1 分钟会更新到正确状态以 Etherscan 链上数据为准

Reverted 的 Gas 会不会被退一部分?

A:退一部分。Solidity 0.8+ 的 EVM 自动退 Gas 的 1/2 实际未用部分——但已经执行到 revert 那一行的部分扣足。

文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认 Etherscan Revert Reason 显示与 Tenderly Debugger 免费额度未变)。