你翻了链上记录,发现钱包资产被转走,但自己的地址里根本没有发起过任何交易,也没有Gas费支出记录——这大概率不是因为私钥泄露,而是你签过一笔名为"Permit2"的链下签名。这个签名的特殊性在于:它本身不产生任何链上交易记录,却给了别人挪走你资产的合法凭证。
步骤 1:理解 Permit2 签名为什么"无痕"
Permit2 是 Uniswap 在 2022 年底推出的代币授权标准,目的是改善传统 ERC20 授权(approve)的体验。它的核心逻辑是:用户只需为 Permit2 合约做一次链上授权,之后每次交互只需做"链下签名"(不需要 Gas 费),Permit2 合约会验证签名并执行 transferFrom 来完成转账。
链下签名本身不会上链,所以在 Etherscan 或 BscScan 上看不到你签署这条消息的记录。但一旦签名被某人提交到链上,Permit2 合约就可以"拿你的签名"去调用 transferFrom,把钱转到签名里指定的地址。这就是"钱包里没有交易记录,资产却被转走"的根本原因。
完成标准:你能区分出"授权钓鱼(需要链上 approve 交易,有 Gas 费记录)"和"Permit2 签名钓鱼(无链上记录,只是签名)"是两种不同的攻击方式。
步骤 2:检查你是否处于风险敞口中
Permit2 钓鱼成立的前提是:你的钱包已经给 Permit2 合约做过链上授权,且授权额度通常是无限的(type(uint256).max)。
哪些用户可能中招:任何在 2023 年后与 Uniswap 或集成 Permit2 的 DApp(如 PancakeSwap)交互过的地址,都可能已经授权过 Permit2 合约。每次在 Uniswap 上 Swap 时,系统会默认让你授权该 Token 的全部余额额度,大多数人会直接点"最大"或默认值。
如何检查:使用 Revoke.cash 等授权管理工具,连接钱包后查看是否有对 Permit2 合约(
0x000000000022d473030f116ddee9f6b43ac78ba3)的授权,以及授权额度是否为"无限"。
常见失败原因:很多人看到钱包里没有转账记录,就以为是交易所或钱包出了问题。实际上问题出在几个月甚至一年前——你授权了无限额度,然后最近在钓鱼网站签了一个 Permit2 签名,黑客拿到签名后马上转走了资产。
高危风险:Permit2 钓鱼在 2024 年初开始规模化活跃,有攻击者专门扫链上旧授权并等待时机。一个典型的案例是:用户在 34 天前签署了钓鱼签名,最初只被转走小额资产,但他没意识到问题、没有撤销授权,30 分钟后 16.2 万美元被全部转走。另一个用户因为一个签名损失了 100 万美元。
步骤 3:撤销 Permit2 授权,关闭风险敞口
如果你发现自己有对 Permit2 合约的无限授权,执行撤销操作:
方式 A(推荐):打开 Revoke.cash,连接钱包,找到 Permit2 合约对应的授权条目,点击"撤销"或"更新",将额度改为 0 或将过期时间设为当前区块。撤销操作会生成一条链上交易,需要支付 Gas 费。
方式 B:直接调用 Permit2 合约的
approve函数,将授权额度设置为 0。
完成标准:撤销交易在链上确认后,再次用 Revoke.cash 检查,确认 Permit2 的授权额度已归零。
步骤 4:建立"签名安全"的日常习惯
学会识别 Permit2 签名内容:Permit2 签名通常包含
Owner(你的地址)、Spender(被授权方,可能是黑客地址)、Value(授权数量)、Deadline(有效期)等字段。如果你看到签名请求中有这些字段,但你没有在官方 Uniswap 或其他可信 DApp 上发起交换,立即拒绝。交互钱包与资产钱包分离:用于日常链上交互的小钱包不放大量资产。大额资产放在冷钱包或另一个从未连接过陌生网站的钱包中。
定期检查授权:每个月用 Revoke.cash 扫一遍所有钱包,清理不必要的授权。
操作完成的校验方式:撤销授权后,去区块浏览器查看你发起的撤销交易(链上记录),确认状态为Success。如果之前收到过钓鱼网站的 Permit2 签名请求但不确定是否签署过,直接按步骤 3 撤销授权,这是最彻底的防御手段。



