DC空投核对台DROPCHECK
工具防骗自查空投教程链上科普关于注册 OKX

钱包授权:怎么检查,怎么撤销

钱包授权检查与撤销示意:approve 授权额度列表与 revoke 撤销按钮
很多被盗其实栽在早先点过的一笔授权,它一直挂在那里,直到被人用上。

有件事我们想先讲清楚,因为它颠覆了很多人对“被盗”的想象:相当一部分钱包被掏空,导火索不是当天发生的,而是你几周、几个月前在某个 DApp 上点过的一笔授权。那时候你可能在某个交换页面换币、在某个领取页“连钱包确认资格”,顺手点了确认,事就办成了,你也忘了。授权却没忘——它安安静静挂在链上,等着哪天那个被授权的合约出问题,或者它本来就是钓鱼合约只是还没动手。等真出事,钱已经走了,你回头才发现源头是那笔早就忘掉的授权。

所以这篇不讲玄乎的,就把一件具体的家务活讲透:授权(approve)到底是什么、为什么有的授权特别危险、怎么把自己名下所有授权翻出来看一遍、怎么把不要的撤掉,以及怎么养成习惯让这事不再失控。名词会用人话解释,但不会为了好懂讲错。读完你应该能独立完成一次“授权大扫除”。如果你还分不清授权和签名的区别,建议配合钱包签名的风险那篇一起看,两件事经常被钓鱼者混在一起用。

授权(approve / allowance)到底是什么

先理解一个底层事实:你的代币(以太坊上的 ERC-20)并不是“存在你钱包 App 里”的文件,而是记在代币合约的账本上的一行数字——某个地址名下有多少余额,是那本账说了算。你的钱包 App 只是拿着私钥、有权签署“把我名下的币转出去”这种指令的工具。关于代币标准本身,以太坊基金会的 ERC-20 说明讲得比较完整。

问题来了:当你想在一个去中心化交易所(DEX)里把 A 币换成 B 币,这个交易所合约需要“替你”把 A 币转走再换回 B。可它没有你的私钥,没法直接动你的余额。于是机制设计成这样:你先发一笔交易,告诉 A 币的合约“我允许某某合约地址,最多从我名下转走 N 个 A 币”。这笔交易就是 approve,被允许转走的数量上限 N 叫授权额度(allowance),那个被授权的对象叫 spender

授权之后会发生什么很关键:在额度用尽之前,那个被授权的合约不需要你再签名、再确认,就能反复把你这种代币转走。这不是漏洞,是 DeFi 能自动运转的基础——你授权一次,之后的交换、加池子、还款都不必每步都让你手动批。麻烦也正出在这“一次授权、长期有效”上:权限是你给出去的,它不会自动收回,除非你主动撤销。

说明

授权(approve)和“签名登录”是两回事。授权是一笔上链交易,把动用你某种代币的权限交出去;普通签名多数只是证明你是钱包主人。但有一类签名(permit)能等价于一次授权,这正是它危险的地方,详见钱包签名的风险

用个不太严谨但好记的比方:approve 像是你给某家代缴公司一张授权书,写明“你可以从我这张银行卡里,最多代扣 N 元”。在额度内,它扣款不用每次问你。授权书一天不撤,它就一天有效——哪怕你早就不用这家公司的服务了。链上的授权就是这么个东西,只不过对象是合约,扣的是你的代币。

NFT 的 setApprovalForAll 为什么更危险

ERC-20 代币那边,授权至少还能限定一个数量上限 N。到了 NFT(ERC-721 / ERC-1155)这边,常见的授权方式叫 setApprovalForAll,它的语义要凶得多:不是“批准操作某一个 NFT”,而是“批准某个地址操作我名下这个系列的全部 NFT,且不限数量、不限次数”。一次签名,整个系列的处置权就交出去了。NFT 相关的标准与授权方式,以太坊基金会的 ERC-721 说明有官方定义。

为什么交易市场要用这种“全部授权”?因为挂单卖 NFT 时,市场合约得有权在买家成交那一刻把你的 NFT 转给对方,而你事先并不知道哪个会成交、什么时候成交,所以它申请的是对整个系列的操作权。这在正规市场里是常规操作。但同样的机制落到钓鱼手里就很可怕——一个伪装成“免费 mint”“领取限定 NFT”的页面,弹出来让你签的可能正是一笔 setApprovalForAll,授权对象是骗子的地址。你以为在白领一个 NFT,实际把你已经持有的、可能很值钱的整个系列的转移权全交了出去。

当心

看到钱包弹窗里出现 Set Approval For All / “授权操作全部”这类字样,而你只是想领一个、买一个 NFT,先停手核对授权对象是不是你信任的正规市场合约。把“全部授权”当成需要格外确认的高危动作,而不是随手点过的常规步骤。

和 ERC-20 一样,setApprovalForAll 也是链上记录,能查、能撤。后面查授权、撤授权的工具,对 NFT 的全部授权同样适用,操作时留意把 NFT 的授权也一并检查,别只盯着代币。

无限额度授权的隐患

回到 ERC-20 的额度 N。理论上你可以把 N 设成“刚好够这次交易用”的数额。但现实里,很多 DApp 为了让你以后不必反复授权,默认申请的 N 是一个极大的数字(接近无限),俗称无限额度授权(unlimited approval)。从体验上确实省事——授权一次,往后都不用再签。代价是风险敞口被放到最大。

无限额度意味着:只要这个被授权的合约是恶意的、或者它本来正经但日后被攻破、被人接管,它就能把你名下这一种代币的全部余额转走,不限次数、不再需要你确认。注意这里的边界——它只能动你授权过的那一种代币,动不了你没授权的资产,也动不了你的助记词。但对那一种代币来说,无限额度等于把保险柜钥匙长期交出去。

  • 风险不在“现在”,在“以后”。你授权时那个合约也许确实安全,但授权是长期有效的。合约可能被升级、私钥可能被盗、团队可能跑路。无限额度让“以后任何时点出问题”都能波及你的全部该币余额。
  • 钓鱼最爱无限额度。钓鱼页把“领空投”包装成一笔对它自己合约的无限 approve。你点的瞬间,它就拿到了掏空你某种代币的长期权限。
  • 你大概率没看清授权给了谁。弹窗里会显示 spender 地址,但很多人直接点确认。无限额度 + 没核对对象,是最常见的踩雷组合。

结论不是“无限额度一律不能用”,而是:能限额就别图省事开无限,开了无限的更要定期清理。两者怎么操作,下面几节会落到具体步骤。

动手前,先过一遍这几个自查

这一步最容易出事。花两分钟用工具核对一遍,比事后补救强得多。

怎么查看自己的授权列表

好消息是:既然授权是上链的真实记录,你就能把自己给哪些合约开过哪些额度,一条条翻出来看。有两个公认好用的入口。

用 Etherscan 的授权检查器

Etherscan 提供了 Token Approval Checker,输入你的地址(或连接钱包),它会列出这个地址名下所有还有效的 ERC-20 授权,包括被授权的合约(spender)、对应的代币、以及授权额度是有限还是无限。Etherscan 是以太坊上最常用的区块浏览器之一,由它来读链上数据,来源是可信的。这一步只是“看”,不需要你签名,也不花钱。

看的时候重点扫三列:一是授权对象是谁——有没有你完全不认识、想不起在哪开过的合约;二是额度是不是无限——标着 unlimited / 极大数字的优先留意;三是这个授权你现在还用不用——很多是早就不再用的旧 DApp 留下的。这三类是撤销的主要目标。

用 revoke.cash 一站把查和撤连起来

另一个更顺手的工具是 revoke.cash,它专门做授权的查看与撤销。你可以先只输入地址做只读查看(不连钱包也能看),它会把 ERC-20 授权和 NFT 的 setApprovalForAll 都列出来,并标出每条授权的风险点。相比纯区块浏览器,它把“发现可疑授权”和“点一下就撤销”做在了同一个界面里,对普通用户更友好。需要真正执行撤销时再连接钱包即可。

小提示

第一次查的时候很多人会被授权数量吓到——撸得越多、连的站越多,挂着的授权往往越多。别慌,这正是该清理的信号。先看,把可疑的、不用的圈出来,下一节再统一撤。

怎么撤销:revoke.cash 与 Etherscan 授权检查器

撤销(revoke)的本质,是再发一笔交易把额度改回 0:你告诉代币合约“原先允许某地址转走的额度,现在改成 0”。改成 0 之后,那个合约就再也动不了你这种代币了。两个工具都能做这件事。

revoke.cash 的流程通常是这样:

  • 打开站点,连接你要清理的那个钱包(确认地址没连错)。
  • 在列出的授权里,找到要撤销的那条——优先撤无限额度的、撤陌生 spender 的、撤你已经不用的旧 DApp 的。
  • 点这条授权的“撤销 / Revoke”。钱包会弹出一笔交易请求,确认无误后签名发送。
  • 等交易上链确认。确认后这条授权的额度就归零了,列表会刷新。
  • NFT 的 setApprovalForAll 同理,找到对应条目点撤销即可。

Etherscan Token Approval Checker 也类似:连接钱包后,每条授权右侧有撤销入口,点了同样会发起一笔归零交易,签名确认即可。两个工具撤销的底层动作是一样的,区别只是界面,挑你顺手的用。

当心

撤销工具本身也有被仿冒的可能。撤销授权请认准官方域名,最好把 revoke.cashEtherscan 存成书签,每次从书签进,别靠搜索框现搜、更别点搜索结果顶部的广告链接。辨别官方渠道的更多方法可以看本站防假空投与授权钓鱼

还有个时间差必须说清楚:撤销是止损,不是追回。如果对方已经拿着你的授权把币转走了,撤销只能阻止“今后再被转”,挽不回已经走掉的。所以一旦怀疑某条授权有问题,撤销要快;但也别把撤销当成万能解药——它防的是未来,不是过去。

撤销要发交易、要付 gas

这点很多人第一次做会卡住,单独拎出来说:撤销授权是一笔真实的链上交易,需要你用钱包签名确认,并支付 gas 费。它和当初的 approve 一样,要矿工/验证者把这笔“把额度改回 0”的操作打包上链,这就得付手续费。

这意味着两件事。第一,你要撤销的那个钱包里,得留有一点点用于付 gas 的主币——在以太坊主网上就是 ETH,在别的链上是那条链的原生币。如果钱包里一点 gas 都没有,撤销交易发不出去。第二,gas 费是浮动的,取决于当时网络的拥堵程度,以太坊主网繁忙时单笔操作的费用会明显上涨,清淡时则低得多。具体怎么算、为什么会浮动,可以看以太坊基金会的 gas 与手续费说明,本站也有一篇地址校验工具帮你在转账或交互前先核对地址没抄错(撤销前确认连的是对的钱包同样重要)。

小提示

如果你名下有一堆要撤的授权,又赶上主网 gas 较贵,可以挑网络清淡的时段集中处理,或优先只撤风险最高的几条(无限额度 + 陌生对象),其余等费用低时再清。先保住最危险的,再慢慢做卫生。

顺带说一句不同链的情况:以太坊主网 gas 相对贵,很多人日常在 Layer 2 上活动,那里手续费低得多。不同链的授权是各算各的,你在哪条链上授权过,就要去那条链上查和撤——revoke.cash 支持切换网络。想了解 L2 生态,L2BEAT 是个常被引用的中立数据站,可以看各 L2 的概况。

日常习惯:限额、分钱包、定期复查

查和撤是补救动作,更省心的是从一开始就少授权、把风险关在小笼子里。下面这几个习惯成本都不高,我们自己一直在用。

能限额就别开无限

不少钱包在 approve 弹窗里允许你手动把额度从默认的“无限”改成“刚好够这次用”。多花十几秒改一下,就把“这个合约日后能掏空我这种代币”的风险,降成“最多被动走这一次的量”。是否每次都改可以自己权衡,但至少对大额、对不太熟的合约,限额是值得的。

分钱包:把金库和折腾隔开

至少分两层。一个“金库钱包”,只存长期资产、几乎不连任何 DApp、最好配硬件钱包;一个“试水钱包”,专门连各种新站、领空投、做任务,里面只放你输得起的少量资金。这样即便试水钱包某天被一笔恶意授权搞了,损失也封顶在那点钱里,金库分文不动。这是性价比最高的一条防线。怎么管理多个钱包、私钥助记词怎么妥善保管,可以一并看助记词安全

把撤销当成定期卫生

授权会越积越多。建议养成定期(比如每月一次)用 revoke.cashEtherscan 过一遍授权列表的习惯,把不再使用的、来路可疑的统统撤掉。授权列表越干净,被某个早就忘了的旧合约连累的概率就越小。你也可以用本站的授权风险自查当对照清单,逐项核一遍再决定撤哪些。

授权前先认出假空投

很多危险授权的源头,是一个根本不该去的钓鱼页。所以最前置的一步其实是识别假空投——领币却要你授权、要你签结构化消息,方向就反了。这套判断我们在防假空投与授权钓鱼里讲得很细,配合本文一起读会更完整。钱包安全设置本身,则以你所用钱包的官方文档为准,例如 MetaMask 支持中心

第一次把授权列表翻出来时,我们也愣了一下——好多授权早就忘了是在哪开的,还有几条是无限额度。撤完那一刻挺踏实的。后来把它变成每月一次的固定动作,心里就不再有那种“不知道哪还挂着雷”的隐隐不安。

收个尾。授权这件事的内核很简单:你为了用 DApp,把“动用某种代币”的权限交了出去,这权限不会自己收回,开成无限就更危险。对应的解法也很朴素——能限额就限额、把金库和折腾分开、定期用可信工具把不用的授权撤干净、永远先认出假空投再决定要不要签。把这几条做成习惯,那种“多年前一笔旧授权突然把人坑了”的剧情,就很难落到你头上。

陈默
空投核对台编辑组 · 编辑(笔名)

自己撸过空投也踩过假空投的坑,现在专门把“怎么安全参与”写清楚。文章只讲方法、不荐项目、不预测价格。