如何在 Ethereum 和其他 EVM 链上撤销代币授权
逐步了解如何在 Ethereum 和其他 EVM 链上撤销授权、哪些授权有风险、撤销需要多少成本,以及撤销无法挽回的事情。
要在 Ethereum 或其他 EVM 链上撤销代币授权,请将钱包连接到可信的授权检查工具(例如 Revoke.cash 或区块浏览器的代币授权工具),选择网络,查看哪些合约可以花费你的代币,然后对不再使用或无法识别的授权提交撤销交易。每次撤销都是一笔将额度设为零的链上交易,需要支付少量 gas 费。
授权是自托管中最容易被忽视的风险之一。每次你在去中心化交易所交易或使用 DeFi 应用时,很可能都授予了某个合约转移你代币的权限。这些权限会无限期保持有效。如果该合约日后遭到攻击,或者你授权的本身就是恶意合约,你的代币就可能在你不再签署任何内容的情况下被转走。
代币授权如何运作
ERC-20 代币是 Ethereum 上大多数代币遵循的标准,其中包含一个 approve 函数。当你授权一个合约时,你就设置了一个额度(allowance),即该合约可以从你的地址转出的该代币的最大数量。
许多应用会请求无限额度,这样你就不必每次交易都重新授权。这很方便,但意味着该合约可以在任何时候(现在或将来)转走你在该代币上的全部余额。
NFT 的运作方式类似。setApprovalForAll 函数会授予操作者转移你所持有的某个系列中所有 NFT 的权限,这正是 NFT 盗取程序瞄准它的原因。
还有一种较新的模式:permit 签名。一些代币和系统(包括 Uniswap 的 Permit2)允许你通过签署一条链下消息而不是发送交易来授予额度。这些签名看起来无害,但可能授权转账。我们关于冰钓鱼与 permit 签名的文章介绍了这一风险。
分步指南:如何撤销授权
- 1直接打开可信工具。 自己输入网址或使用书签。知名的选择包括 Revoke.cash,以及 Etherscan 和其他浏览器上的代币授权检查工具。存在假冒的“撤销”网站,因此切勿点击私信或广告中的链接。
- 2连接钱包或粘贴你的地址。 粘贴地址可以让你在不连接钱包的情况下查看授权。只有在提交撤销交易时才需要连接。
- 3选择网络。 授权是按链区分的。先检查 Ethereum,再逐一检查你使用的每个网络,例如 Arbitrum、Optimism、Base、Polygon 或 BNB Smart Chain。
- 4查看列表。 对于每项授权,你会看到代币、获得支出权限的合约、额度数量,通常还有授权时间。
- 5确定要撤销的内容。 优先处理无限额度、你不认识的支出方、你不再使用的应用,以及任何涉及已知攻击事件的合约。
- 6点击撤销并在钱包中确认。 阅读钱包的提示:它应该是一个将额度设为零的
approve调用(对于 NFT,则是设为 false 的setApprovalForAll调用)。 - 7对每个网络重复操作。 然后刷新页面,确认授权已被清除。
应优先撤销哪些授权
| 授权类型 | 风险等级 | 处理方式 |
|---|---|---|
| 对未知合约的无限额度 | 高 | 立即撤销 |
对贵重 NFT 系列的 setApprovalForAll | 高 | 除非正在挂单出售,否则撤销 |
| 对不再使用的应用的无限额度 | 中 | 撤销 |
| 对常用知名应用的有限额度 | 低 | 保留或降低额度 |
| 对涉及攻击事件的合约的授权 | 高 | 立即撤销 |
撤销无法做到的事
撤销是预防措施,而不是补救办法。它无法:
- 找回已经被转走的代币。
- 在你的助记词或私钥被盗时保护你。在这种情况下,攻击者可以签署任何内容;请按照钱包被盗后应立即采取的措施中的说明,将剩余资产转移到新钱包。
- 可靠地取消你已经给出的链下 permit 签名。这些签名遵循各自的过期和 nonce 规则,所以如果你签署了可疑的 permit,最安全的做法是把受影响的代币转移到一个全新的钱包。
今后如何降低授权风险
- 设置自定义额度。 许多钱包允许你在授权提示中修改金额。只授权你打算花费的数量。
- 用单独的钱包做尝试。 准备一个一次性钱包用于新应用、铸造和空投,并把长期资金放在从不连接陌生网站的钱包里。
- 阅读每一个签名请求。 如果某个网站要求你签署一条你看不懂的消息,请停下来。
- 定期检查授权。 每隔几个月一次,以及每次尝试新应用之后。
- 也要检查已连接的网站。 连接和授权是两回事;请参阅钱包权限与已连接网站。
常见错误
- 使用通过搜索广告或社交媒体回复找到的假冒撤销工具。
- 在 Ethereum 上撤销了授权,却忘了同一钱包在二层网络上的授权。
- 以为在钱包中断开网站连接就会移除其授权。并不会。
- 忽视低价值代币;攻击者往往会把能拿走的全部扫空。
总结
代币授权是一种常驻权限,会在你授予之后长期存在。检查它们是免费的,撤销它们很便宜,而定期这样做可以堵住盗取程序最常用的途径之一。把它变成你的日常习惯,只授权你需要的额度,并把主要资产放在一个很少签署任何内容的钱包中。
常见问题
什么是代币授权?
代币授权是你授予智能合约的一项权限,允许它在设定的额度内从你的钱包转移某种特定代币。去中心化交易所和其他 DeFi 应用需要授权才能运作。即使你再也不访问该应用,这项权限也会一直有效,直到你撤销它或额度被用完。
撤销授权需要支付 gas 吗?
需要。撤销是一笔将额度设为零的链上交易,所以你需要支付正常的网络手续费。在 Ethereum 主网上,这笔费用可能比较明显;在二层网络上通常很便宜。查看你的授权是免费的。
撤销授权能找回被盗的代币吗?
不能。撤销只能阻止该合约未来的转账。已经被转走的代币无法通过撤销找回。如果你的助记词或私钥已经泄露,仅撤销是不够的;请把剩余资金转移到新钱包。
我应该多久检查一次代币授权?
一个好习惯是每隔几个月检查一次,并在每次与新的或不熟悉的应用交互后检查。如果你怀疑自己签署了恶意内容,也要立即检查。
