Reverted 交易是什么 / 怎么读 Revert Reason|从 require 到具体修正
交易 Reverted 是「已上链但合约 require 失败」——Etherscan 会在交易页显示 Revert Reason 字段。本文按 6 步教你看懂常见 10 个 Revert Reason、定位错误源、修正后重发。
Reverted 是什么意思?直接答:Reverted 表示交易已上链但合约里的 require 或 revert() 语句被触发——执行被回滚到交易开始前的状态,但 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 免费额度未变)。