如果你用过 DeFi 应用,你很可能已经签过无限授权(Infinite Approval)。当你第一次在 Uniswap 上交易某个代币时,MetaMask 弹出一个 approve 签名请求,金额显示为一个非常大的数字(通常是 115792089237316195423570985008687907853269984665640564039457.584007913129639935,即 2^256-1)。你点了确认。

这意味着什么?意味着你授权了那个合约可以无限制地转移你的代币。不限次数,不限金额,不限时间。

核心要点: 无限授权将代币控制权永久交给了智能合约。如果合约有漏洞或被攻击,你的代币会被清空。正确做法是:只在必要时授权,授权金额尽量精确,定期检查和撤销不再使用的授权。

无限授权的来源

ERC-20 标准的 approve 函数允许代币持有者授权另一个地址使用自己的代币。你可以授权精确金额(如授权 100 USDC),也可以授权无限金额。

在以太坊的早期 Gas 费不太贵的时候,精确授权是标准做法:你要交易 100 USDC,就只授权 100 USDC。交易完成后授权用完了,下次再交易再授权。

但随着 Gas 费飙升,每次授权都要花一笔 Gas 费,用户开始倾向于一次性授权一个大金额(通常是无限),省去反复授权的麻烦。DeFi 前端也默认使用无限授权,因为这样用户体验最好。

风险在哪里

风险的核心是信任假设。无限授权等于你信任那个合约:它不会出 bug,它不会被黑客攻击,它不会被项目方恶意利用。

但实际上:

合约漏洞每年都在发生。即使是经过审计的知名合约,也不能保证绝对安全。一旦合约被攻击者利用,攻击者可以通过合约的漏洞调用 transferFrom,直接转走你授权过的代币。

前端被黑的情况也有。如果 DeFi 应用的前端被攻击者入侵,攻击者可以在前端注入恶意代码,诱导你对一个不同的合约地址进行授权。你以为在用正常的应用,实际上你授权了一个攻击者控制的合约。

跨链桥的授权尤其危险。很多跨链桥需要你无限授权 ERC-20 代币,这意味着桥合约的安全性直接关系到你授权代币的安全。

如何检查现有授权

检查你的钱包有哪些授权,使用以下免费工具:

revoke.cash 是最流行的授权管理工具。连接钱包后,它会列出你在所有链上的所有代币授权,包括授权的合约地址、代币种类和授权金额。你可以直接在网页上撤销不需要的授权。

Etherscan Token Approval Checker 在 Etherscan 上直接使用。输入你的钱包地址,它会显示该地址的所有授权记录。功能不如 revoke.cash 全面,但不需要连接钱包。

Beefy Finance Approval Tool 也是一个选择,支持多链授权检查。

检查时重点关注:

授权金额是否为无限(unlimited 或显示非常大的数字)。如果是,考虑撤销后重新授权精确金额。

授权的合约地址你是否认识。如果你看到授权给一个你不认识的合约地址,很可能你曾经在某个钓鱼网站签过授权,必须立即撤销。

你是否还在使用该 DeFi 应用。如果某个授权你已经不再使用(比如你不再使用某个 DEX),撤销它以减少风险面。

撤销授权的 Gas 费

撤销授权需要发送一笔链上交易,因此需要支付 Gas 费。在以太坊主网上,这笔费用可能不低(取决于当时的 Gas 价格)。

降低成本的方法:在 Gas 费较低的时段(通常是周末 UTC 时间)批量撤销;或者在 Layer 2(如 Arbitrum、Optimism)上操作,Gas 费便宜得多。

有些工具(如 revoke.cash)支持批量撤销功能,可以在一笔交易中撤销多个授权,节省 Gas 费。

最佳实践

精确授权。 如果 DeFi 前端支持自定义授权金额,输入你实际需要交易的金额加上少量余量。虽然需要更频繁地授权,但大幅降低了风险。

定期清理。 每月检查一次你的代币授权,撤销不再使用的。这就像定期更换密码一样,是基本的安全卫生。

冷热钱包分离。 把大部分资产放在一个从不交互任何合约的冷钱包里。热钱包只放少量日常使用的资金,即使授权被利用,损失也有限。

关注安全事件。 如果你授权过的某个 DeFi 协议被报出安全漏洞,第一时间撤销授权,即使你不想用它了,也不要让授权悬着。

无限授权是一个典型的”便利 vs 安全”的取舍。DeFi 选择了便利,把风险留给了用户。你能做的是通过主动管理授权,把这个风险降到最低。