
很多“钱包被盗”的故事,起点不是私钥泄露,而是一次授权。你在某个站点点了“确认”,签下的不是一笔转账,而是一张长期有效的取款委托书。这篇文章把授权讲清楚:它授了什么、为什么默认是无限额度、Permit2 又新增了哪一层风险,以及怎么用三步把已经给出的权限收回来。
一、授权不是转账,是委托
链上代币合约里有一张表:谁允许谁动用自己多少余额。approve 这个动作就是在表里写一行——允许某个地址最多动用 N 个代币。写入本身不转移资产,但它决定了对方以后能不能在你不再操作的情况下把钱划走。
关键点在于:授权是一次性的,动用是持续的。你签名一次,对方可以在未来任何时间、分多次,把额度内的余额取走,直到你主动把额度改成 0。链上不会因为“这个网站已经下线”而自动失效。
二、为什么默认是无限额度
常见做法是把额度设成 2^256-1,也就是一个几乎无限大的数。原因是省 gas 和省操作:如果每次交易都要先授权精确金额,用户需要签两笔交易、付两次手续费;设成无限,后续 swap 就不用再授权。
这个设计对协议方便,对用户是风险敞口。一旦协议合约有漏洞,或者前端被替换,攻击者能拿走的不是“你这次打算交易的金额”,而是“该代币的全部余额”。这也是为什么“无限授权 + 不撤销”是最常见的组合。
三、三种授权,风险不一样
| 类型 | 你签的是什么 | 影响范围 | 怎么撤 |
|---|---|---|---|
| ERC-20 approve | 单个代币的额度 | 只影响该代币 | 重新 approve 为 0 |
| NFT setApprovalForAll | 整个系列的转移权 | 该系列全部 NFT | 设为 false |
| Permit2 | 一个统一的授权合约 | 多个代币、多个协议共用 | 在 Permit2 里单独撤销 |
前两种是“一个代币 / 一个系列”。Permit2 不一样:它把所有授权集中到一个合约,用户签一次,多个协议都能通过它扣款。方便,但也意味着撤销时要找对地方——在代币合约里把额度改成 0,并不会清掉 Permit2 内部的授权。

四、签名钓鱼:比 approve 更隐蔽
Permit 类签名(EIP-2612)允许“离线签名 + 别人代付 gas 上链”。用户看到的是一个看起来无害的签名弹窗,签完之后授权已经生效,而钱包里没有出现任何“授权”字样。这类钓鱼的特点是不需要你付 gas,也不需要你点“确认交易”。
识别方法很朴素:任何要求你签“消息”而不是“交易”的页面,都要先看清内容。签名的原文里应该能看到 spender 地址、金额和截止时间;看不到,就不要签。
五、三步撤销已给出的授权
- 查。用区块浏览器的授权查询功能,或以自己地址为关键词查看代币的 Approval 事件,列出所有 spender。
- 撤。对每个不再使用的 spender,把额度 approve 为 0;NFT 用 setApprovalForAll(false);Permit2 要在其合约里单独撤销。
- 复核。撤销后重新查一遍,确认额度确实为 0,而不是“交易已提交”。
成本很低:一次撤销通常只花几万 gas,在低费链上不到 0.01 美元,在主网拥堵时也就一两美元。相比之下,一次无限授权被利用的损失是全部余额。
六、日常习惯:三条就够
第一,能不无限就不无限:支持精确额度的协议,就填本次交易金额。第二,用完即撤:不常用的协议,交易完当场撤销。第三,分开钱包:大额资产放一个从不签名的地址,交互用另一个。这三条不解决所有问题,但把“一次失误 = 全部损失”降成“一次失误 = 交互钱包里的余额”。
七、常见误区
“我没点转账,所以没事”。授权本来就不转账,它只写额度,所以不会有转账记录提醒你。
“网站关了授权就没了”。授权在链上,与网站是否运营无关。
“撤销要花钱,不划算”。撤销成本是 gas,一次几美分到一两美元;不撤销的尾部风险是余额归零。
八、延伸阅读
- 储备证明(PoR)证明了什么:默克尔树、快照时间与它的三个盲区
- 交易卡在 pending 怎么办:nonce、加速与替换交易的规则
- 三明治攻击是怎么吃掉你的滑点的:MEV、排序权与四道防线
- DeFi 借贷的利率与清算是怎么算的:LTV、健康因子与资金利用率
常见问题
撤销授权要付多少 gas?
一次 approve 为 0 通常消耗几万 gas。低费链上不到 0.01 美元,以太坊主网拥堵时约 1-2 美元。
授权额度改成 0 之后,之前的交易记录会消失吗?
不会。链上历史永久保留,撤销只是让未来的扣款不再被允许。
为什么有些网站要求先授权再交易?
因为代币合约默认不允许第三方直接划转你的余额,必须先写入额度。部分聚合器会把授权与交易合并成一笔,减少一次确认。
Permit2 的授权在哪里撤销?
在 Permit2 合约的授权管理界面,而不是在代币合约里。代币合约里显示额度为 0,并不代表 Permit2 内部的授权已被清除。
硬件钱包能防住授权钓鱼吗?
只能降低风险。硬件钱包会显示签名内容,但如果用户不看清楚就确认,授权一样会生效。设备防的是私钥泄露,不防“你自己签了”。
说明:本文只讲机制与操作步骤,不构成投资建议,也不对任何协议作安全性背书。
《链上授权到底授了什么:无限 approve、Permit2 与撤销的三步操作》有1条评论