指南 · 钱包风险 · · Stefan Tsezarov
授权代币时你实际签署的是什么
支出许可可能和付款一样重要。
你打开一个兑换应用,选择一个代币并连接钱包。兑换之前,钱包请你批准支出。
看起来没有代币离开。这像是一个设置步骤。
它确实是设置步骤——但它给了另一个地址转移你代币的许可。根据你批准的内容,这项许可可能在你关闭网站很久之后仍然有效。
授权是使用加密应用的正常部分。风险在于授予了超出本意的访问权限,或者把它授予了错误的地址。
本指南解释这种访问意味着什么、签名前要检查什么,以及如果你已经批准了可疑的东西该怎么办。
它涵盖以太坊及兼容网络。其他区块链使用不同的许可系统。
01授权给予的是支出许可
你的钱包持有用于授权操作的密钥。你的代币余额记录在代币的智能合约中。
兑换或借贷应用要转移这些代币,通常需要先得到你的许可。你把这项许可授予一个叫 spender(支出方)的地址。被允许的数额叫 allowance(额度)。
假设你想兑换 50 USDC。
- 批准 50 USDC,支出方最多可以拿走这个数额。
- 批准 无限 USDC,只要这项许可仍然有效,它就可以拿走你可用的 USDC 余额,包括你以后收到的 USDC。
这项授权只涉及该网络上的指定代币。它本身并不会让对方访问你钱包里的所有东西。
标准的代币授权通常没有到期时间。它会一直有效,直到你更改或撤销,或者额度被用完。关闭网站或断开钱包连接并不能移除它。Revoke.cash 解释了断开连接和撤销的区别。
02不同的请求给予不同的许可
钱包的措辞各不相同。以下是需要认出的主要请求:
| 请求 | 它可以授权什么 |
|---|---|
| Approve 或支出上限 | 支出方最多可以转移某一种代币的指定数额。 |
| Set approval for all | 操作方可以转移你在指定合集或合约中的所有 NFT,包括授权有效期间你之后获得的 NFT。 |
| Permit | 一个可以稍后提交、用来创建代币额度的签名。 |
| Permit2 | 一个根据请求内容,可以授权限时额度或一次性转账的签名。 |
“Approval for all” 比批准单个 NFT 范围更广,但仍然限于相关的 NFT 合约。ERC-721 定义了这些许可。
一个签名就能在不付 gas 的情况下授权支出
标准授权通常需要一笔链上交易。Permit 从一个链下签名开始:签名本身不会创建区块链交易,也不收取 gas。
别人可以稍后提交这个签名,并支付交易费用。
对于标准的 ERC-2612 permit,截止时间(deadline)是签名可以被提交的最后时间。它不是提交后所创建额度的到期日。ERC-2612 规定了它的运作方式。
Permit2 的运作方式不同。它需要先有一项对 Permit2 合约的代币授权,然后支持限时的支出许可或一次性的签名转账。Uniswap 的 Permit2 文档解释了这两种途径。
你不需要记住这些标准。记住这一点:
不付 gas 不等于没有经济后果。
并非每个签名都会授予支出权限。登录消息可能另有用途。看清请求授权了什么,而不是根据“Sign”按钮来判断。
03诈骗者如何利用这些许可
假网站并不总是要你发送加密货币。它可能要你“验证钱包”“领取奖励”或“继续”。
那个按钮背后是一个给攻击者支出权限的请求。
网站随后可能显示一个错误。你关掉它,以为什么都没发生。但攻击者可能已经拿到了可用的授权或签名。
转账可能立即发生,也可能稍后发生。你不会收到第二次批准请求。
这不需要你的恢复短语被盗。即使是硬件钱包,也无法保护你免受你自己授权的有害许可。Revoke.cash 说明了这一局限。
04批准或签名前的五项检查
1. 把请求和你想做的操作对应起来
兑换合理地可能需要访问你要卖出的代币。
简单的登录或普通的空投领取不应需要对你现有代币的无限访问。如果网站说“验证”,而钱包说“批准支出”,停下来弄清原因。
2. 检查谁获得许可
支出方是获得访问权限的地址。熟悉的标志或合约名称并不能证明它属于该应用。
用该应用的官方文档核对预期的合约和网络。有些应用使用多个合约,所以根据地址标签去猜并不可靠。
3. 限制数额
在钱包允许的情况下,只批准该操作所需的数额。
对于一次 50 USDC 的兑换,无限额度暴露的 USDC 超出了需要。较小的上限能限制这种暴露;它并不能让恶意的支出方变得可信。
4. 像对待交易一样认真阅读签名
找到代币、支出方、数额、网络以及任何截止或到期时间。字段名称各不相同。
如果钱包无法把请求解释得足够清楚让你理解,就拒绝它,并通过该应用的官方文档调查。
5. 把积蓄和陌生应用分开
用一个余额很小的独立钱包来试用新服务。避免连接存放你长期积蓄的钱包。
这样可以限制一项有害授权能触及的范围。
05如果你已经批准了某样东西
如果你怀疑盗窃正在进行,请立即行动。例行的授权清理和签名泄露是不同的情况。
对于现有的授权:
- 直接打开 Revoke.cash 或 Etherscan 的 Token Approval Checker。避免使用主动找上门的“客服”账户发来的链接。
- 检查你使用的每一个网络。你可以在不签署交易的情况下查看一个公开地址。
- 撤销你不再需要的许可,优先处理可疑的支出方和不必要的无限额度。
- 确认每一笔撤销交易都成功了。需要支付网络费用。
撤销会移除支出许可。它不能追回已经转走的资产。断开网站连接不能替代撤销。Revoke.cash 的常见问题说明了这些局限。
如果你签了一个可疑的 permit
尚未使用的签名可能不会出现在授权检查工具中。
撤销一个可见的额度可能并不能让那个签名失效。例如,一个未过期的 ERC-2612 permit,只要它的 nonce——防止重复使用的计数器——仍然有效,就仍能创建额度。参见 ERC-2612 规范。
考虑把受影响的资产转移到你控制的另一个钱包。在签名失效或无法再被使用之前,不要把它们转回暴露的地址。转移资产和撤销许可可能要和攻击者赛跑;两者都不能保证你先行一步。
如果你的恢复短语或私钥泄露了,请用新的恢复短语创建钱包。从泄露的短语派生出的另一个账户不是安全的替代品。
警惕主动找上门的追回服务,尤其是要求预付费用或索要你的恢复短语的。
06SaveSaveSaveSave 能帮你检查什么
消息扫描器可以标记那些推动你签署消息、批准无限支出或授予广泛代币许可的措辞。
这是对你粘贴的文字的警告。不是对你钱包中请求的检查。
扫描器不会确定一个签名授权了什么,不会列出你现有的额度,也不保证支出方可信。没有报告警告的地址检查,并不是批准它的理由。
用授权检查工具查看现有的许可。在授予新的许可之前,先弄清三件事:
谁可以支出、他们能触及哪些资产、你允许的数额是多少。
示意图中的支出方地址和网站都是虚构的。本指南是一般性信息,不是理财建议。