阅读完本文,你就知道:为什么普通转账 ETH 只需要一次交易,而 ERC20 代币却把一次操作拆成两步?只要理解背后原理,钱包弹出的 “Approve + Swap” 就再也不会让你一脸懵了。
目录
引言:一笔看似简单的转帐
在以太坊网络里,直接把 ETH 打给朋友,操作直觉:填写地址 → 输入金额 → 签名 → 广播,一笔交易立刻完成。
换成 USDT、UNI、LINK 等所有遵循 ERC20 标准的代币,钱包或 DEX 会让你先 “Approve”,再 “Swap/Transfer”;明明只想转 100 USDT,却弹出两笔交易,强度 ??神秘。
👉 戳这里马上看全文,读懂 approve 后节省的手续费玄机
ERC20 代币到底是什么
关键词:智能合约、映射账本、地址余额
- ERC20 代币并不是以太坊原生的 “钱包余额”,而是一段运行在以太坊上的智能合约所维护的映射账本。
- 你钱包里显示的 1000 USDT,其实是 USDT 合约的储存空间里有一行数据:
balanceOf[你的地址] = 1000 * 10^6 - 当合约本身不主动“收款”时,其他任何地址都不能直接改写这行数据,必须通过授权机制——这就是两次交易的核心原因。
两步流程拆解
| 步骤 | 交易签名地址 | 交易目标 | 用途 | 典型 gas 消耗 | |—|—|—|—|—| | 第一次 | 你 | Token 合约 | 声明“我允许某合约在未来最多提取 X 代币” | 40 000~60 000 | | 第二次 | 你 or 第三方 | DEX/目标合约 | 真正发起转账或兑换,合约依据授权把代币划走 | 100 000~180 000|
钱包界面见到的Approve就是第一步;Swap/Transfer是第二步。
实操示例:用 Uniswap 把 82 cDAI 换成 0.0092 ETH
- Approve(授权)
- 你向 cDAI 合约 提交:
“允许 Uniswap cDAI/ETH 交易对在后续操作中,从我的账户里提取 cDAI”。
- 你向 cDAI 合约 提交:
- Swap(兑换)
- 你向 Uniswap 路由合约 提交:
“请把 82 cDAI 从我账户转给你,并发给我 0.0092 ETH”。 - Uniswap 合约在第二步执行时,会主动调用 cDAI 合约的 transferFrom,因为步骤 1 已获授权,于是转账成功,无需你再签名一次。
- 你向 Uniswap 路由合约 提交:
小技巧
大部分前端默认把授权额度设为type(uint256).max(≈2^256-1),省得以后重复授权,但也为风险埋雷;下文会讲如何管理。
安全风险 & 常见误区
- 无限额授权
把 approve 额度设为极大值,一旦目标合约出现漏洞,黑客可直接提走你所有同种代币。 - 授权遗忘
很多人 swap 后就忘记 revoke,几个月后项目跑路才发现 token 被提空。 - 误授权钓鱼网站
伪造域名诱导你 approve,再调用 transferFrom 把资产转走。
最佳实践:
1) 对不信任的小众项目,把 approve 额度设成实际消费额 + 少量溢出;
2) 常用 revoke 工具定期清理历史授权:可通过搜索关键词 eth revoke approval 找到一键管理平台。
FAQ | 最常见 6 个疑问
Q1: 为什么我转账给朋友钱包里显示的 直接从余额扣走,却还在链上看到两次交易?
A: 你用的是 托管交易所 或 CEX 热钱包,其内部数据库更新余额,链上把多次用户操作合并为一笔。
链上视角看,仍需两步(approve + transfer),只是由交易所在后端完成。
Q2: ERC-777、ERC-721 也需要两次交易吗?
A: ERC-777 带 operator 概念,可一次性授权,无需每次转账;NFT 标准 ERC-721 则用 setApprovalForAll,同样是一步授权多次转移,但首次也至少 2 交易(授权 + 转让)。
Q3: 有没有办法把两次合并成一次?
A: EIP-2612 引入 permit,允许链下一签名即可授权,可减少一次链上交易,常见 DEX 如 Uniswap V3 已集成。
Q4: Approve 交易的 gas 可以打折吗?
A: 调小授权额度、选低峰时段打包、或换用 Layer2(Arbitrum、Optimism、Polygon)。
👉 立即查看链上实时 gas 价格,一键锁定最优手续费
Q5: 我在 BSC、Avalanche 上操作也经历同样流程吗?
A: 是的,只要代币合约遵循 ERC20(或其兼容标准),approve + transferFrom 就是通用路径,链只是 gas 货币不同。
Q6: 如果我误操作把 approve 给错地址怎么办?
A: 立刻发起一笔额度为 0 的 approve 交易给相同地址,等同撤销旧授权;比 revoke 合约更直观且立即生效。
结语:如何优雅地省 gas
- 理解 approve 的必要性——它让智能合约获得“提币代开权”,既防重复签名,又能组合更复杂的 DeFi 逻辑。
- 定期清理无限授权,减少“踩雷”事件。