怎么撤销代币授权?2026 完整教程:Revoke.cash 与 Etherscan 双路径实操

教程 · 2026-05-30 · 比特三棱镜编辑部
AI 搜索

很多人以为链上被盗的钱大部分是助记词泄漏,其实不是——2024 到 2026 年这三年,因为忘记撤销代币 approval 而被掏空的钱包才是大头。一个 2022 年签过的"无限额度"授权,三年后还在那里挂着,等你账户里一进 USDC 就能被旧合约一把转走。撤销授权(revoke)不是高深操作,但必须定期做。这篇我用 Revoke.cash 和 Etherscan 两条路径走一遍,新手照着抄能在 30 分钟内把多链账户全部清干净。

一张授权清理流程图,左边是代币 approval 列表,右边是 revoke 按钮发出的安全光圈

先搞清楚 approval 到底是什么

ERC-20 代币的转账模型和你银行卡的转账模型完全不一样。你点一次"在 Uniswap 上用 USDC 换 ETH",背后其实是两笔交易:

  1. 第一次 approve(Uniswap_Router, amount)——告诉 USDC 合约"允许 Uniswap 路由从我账户拿走最多 X 个 USDC"
  2. 第二次 swap(...)——Uniswap 调 transferFrom 从你账户里实际拿走代币

问题在于第一步的 amount,绝大多数前端默认填的是 2^256 - 1,也就是"无限大"——为的是用户不用每次交易都签两次。这是用户体验和安全的经典权衡,但代价是:

  • 这个授权永久有效,除非你主动 revoke
  • 如果 Uniswap 路由有一天被攻破、或被钓鱼合约伪装、或前端被劫持,它可以把你账户里所有 USDC 一次清空
  • 你即使把代币转走,授权也还在,账户再进币照样会被划走

这就是为什么 MetaMask 钓鱼防御 那篇里反复强调要看签名内容——你看到的"unlimited"四个字,是真正的损失上限。

路径 A:用 Revoke.cash(推荐普通用户)

Revoke.cash 是行业里最早做这件事的工具,免费、开源、支持几十条链。流程极简:

  1. 打开 revoke.cash注意域名拼写,不要点搜索引擎广告位
  2. 右上角连接钱包(也支持只读模式:粘贴地址即可查看,不连钱包更安全)
  3. 选择链——以太坊、Arbitrum、Base、Optimism、Polygon、BNB Chain、Avalanche 等主流链都覆盖
  4. 等待几秒,页面会列出当前账户的所有 approval:代币、被授权方、剩余额度、最近一次交互时间
  5. 对每一条点 Revoke,钱包弹出签名,签下去就完成

撤销本身是一笔链上交易,要花 Gas。主网现在每条 revoke 大约 1-3 美元,L2 几美分。我自己的习惯是每季度把 Layer2 上的 approval 全部清掉,主网每半年清一次。

清理优先级 特征 建议动作
P0 立即撤 无限额度 + 半年内没用 + 资产持仓 ≥ 10% 当天 revoke
P1 高优先级 无限额度 + 一年内没用 一周内 revoke
P2 中优先级 有限额度但额度远超日常使用 改成"按需额度"重新 approve
P3 低优先级 上周才用过的主流协议 保留观察

路径 B:用 Etherscan 自带的 token-approval-checker

Etherscan 的 Token Approval Checker 在地址页右上角的 More 菜单里,或者直接访问 etherscan.io/tokenapprovalchecker。这条路适合:

  • 不想授权 Revoke.cash 连接钱包的人(虽然 Revoke.cash 本身不要求授权代币)
  • 想直接在 Etherscan 这个已经熟悉的环境里操作
  • 需要核对一笔历史 approve 交易的 hash

操作流程:

  1. 输入你的钱包地址(或连接钱包)
  2. 页面列出所有 approval,每行带 Approved AmountLast Updated 时间戳、合约源代码链接
  3. Revoke 会跳转到 MetaMask 等钱包发起一笔 approve(spender, 0) 交易——本质就是把额度改为 0
  4. 签名、上链、刷新页面看额度变成 0 即可

Etherscan 的好处是数据来源最权威,你可以点开 spender 合约直接看代码、验证状态、看它是否已经被标记为恶意。坏处是它一次只能看一条链——多链账户要切链查多次。这一点 Revoke.cash 体验更好。

Etherscan token approval checker 页面示意,列表显示多笔授权与 revoke 按钮

路径 C:钱包内置功能(Rabby、MetaMask 新版)

2025 年开始 Rabby 钱包 把 approval 管理做进了 “Approvals” 菜单,MetaMask 2026.x 版本也跟进了。流程和 Revoke.cash 几乎一样,区别是:

  • 钱包内置版不需要打开第三方网站,钓鱼面更小
  • 默认只显示当前选中的链,多链要逐条切换
  • Rabby 会根据 spender 风险评级(黑名单、灰名单、白名单)做颜色标记,比纯列表更直观
  • 可以参考 Rabby vs MetaMask 对比 选适合自己的

如果你正在用 Rabby,我建议把内置功能当作"每周巡检"工具,Revoke.cash 留给"季度大扫除"——两者数据源略有差异,互为校验。

几个容易被忽略的细节

第一NFT 的 setApprovalForAll 比 ERC-20 的 approve 更危险。一个授权可以划走你整个合约下的所有 NFT,BAYC、CryptoPunks、Pudgy Penguins 全部一起没。Revoke.cash 会把这类授权用红色高亮,优先于 ERC-20 处理

第二Permit2 不在传统 approval 列表里。Uniswap 推广的 Permit2 用一个中转合约统一管理授权——你看到的 approval 是对 Permit2 合约的,Permit2 内部还有一层签名授权需要在 app.uniswap.org 的 Permit2 页面单独 revoke。这一点很多教程没讲。

第三不是所有过期的授权都需要撤。如果剩余额度只有 100 wei,根本不值钱花 Gas 去清;如果合约本身是知名 DEX、你下周还要用,撤完下次还要重新 approve,浪费两次 Gas。我的原则是:风险 × 资产规模 > Gas 成本的 10 倍才出手。

第四清完不是一劳永逸。每用一次新协议、领一次空投、做一次跨链,都可能产生新 approval。养成"用完一个新协议就去看一眼 Revoke.cash"的习惯,比每季度一次大扫除有效得多。

我的常用清单和自检节奏

写到这里,干脆把我自己用了两年的"approval 体检表"贴出来,你可以照搬:

  • 每月:打开 Revoke.cash,扫一眼主网 + 常用 L2,对 P0/P1 立即处理
  • 每季度:把所有 L2 上"半年没动过"的 approval 全部清掉,Gas 几乎可以忽略
  • 每半年:主网做一次"全清扫",包括 Permit2、NFT setApprovalForAll
  • 每次大额入金前:先去 Revoke.cash 跑一遍,确认没有遗留授权吃这笔新钱

把这套节奏跑顺,剩下的 95% 安全风险才回到 助记词管理钓鱼识别 上——而不是被一笔三年前签的 approve 吃掉余额。