代币授权,本质上是钱包持有人把某种代币的可使用额度交给指定智能合约或地址,而不是当场完成一笔转账。用户在去中心化交易所兑换 usdt、参与质押、借贷、挖矿或购买 nft 时,钱包里常见的approve确认框,通常就是在设置这项权限。授权完成后,被授权方可以在额度范围内调用代币合约的转账逻辑,代用户转出相应资产,因此它既是 defi 运转的基础,也是链上钱包安全中最容易被忽视的一环。

以 ERC-20 代币为例,授权主要围绕三个概念展开:approve、allowance 和 transferFrom。approve 用来设定某个 spender,也就是被授权合约或地址,最多可以动用多少代币;allowance 用来查询当前剩余额度;真正执行代扣时,通常由合约调用 transferFrom,把代币从用户地址转到交易、借贷或协议指定的位置。授权额度与钱包余额不是一回事,钱包里暂时没有某种代币,并不代表授权自动失效,之后重新买入同一代币,仍可能受到原有额度影响。

用户在 DEX 上兑换 100 USDC,钱包可能只需要授权 100 USDC,也可能弹出无限授权。所谓无限授权,通常是把额度设为极大的整数,部分 ERC-20 实现会让该额度在 transferFrom 后不再递减,方便用户反复交易,减少重复支付 Gas 的次数。便利背后是持续暴露的风险:一旦合约存在漏洞、项目权限被盗,或用户误连了仿冒网站,攻击者可能在授权仍有效时转走该代币。风险范围通常限定在被授权的币种和网络,不等于对方拿到了助记词,也不代表 ETH、BTC 等所有资产都会同时失守。

连接钱包和代币授权也不能混为一谈。连接 DApp,通常只是让网页读取地址、余额或发起交互请求;代币授权则是把特定资产的使用权限写入链上。断开网站连接,并不会自动清除已经生效的 allowance。Permit、Permit2 等签名式授权还可能不需要单独发送 approve 交易,用户只需签署一段消息,后续由合约提交执行,因而不能把没有支付 Gas理解成没有风险。遇到免费空投、抽奖、铸造 NFT 等页面时,签名前应核对网络、代币合约、spender 地址、授权数量和有效期限,无法读懂的盲签请求不宜贸然确认。
管理代币授权,核心不是完全拒绝链上交互,而是把权限控制在合理范围。日常交易可优先选择自定义额度,接近实际使用量即可;长期不用的协议、已经停止运营的项目、曾经出现异常的合约,应及时检查并撤销授权,常见做法是把对应 allowance 改为 0,但撤销本身也是一笔链上交易,需要支付 Gas。修改旧额度时,还要留意 ERC-20 授权覆盖机制带来的竞态问题,部分实现建议先将原额度降为 0,再设置新额度。把大额资产放在不连接陌生 DApp 的独立钱包,交互钱包只保留必要资金,往往比事后追查被盗转账更实际。
