定义
EIP-2612 是以太坊改进提案,在 ERC-20 代币标准的基础上加了一个 permit(owner, spender, value, deadline, v, r, s) 函数。意思是:代币持有者用 EIP-712 格式签一条离链消息,授权 spender 在 deadline 之前可以转移 value 数量的代币。
关键词是"离链签名"。传统 ERC-20 的 approve 是一笔上链交易,要花 gas。Permit 的签名只是一条数据,不上链、不花 gas。等 spender 需要花这笔授权时,再把签名打包进自己的交易里上链兑现。
主流稳定币里 USDC、DAI 原生支持 Permit。USDT 不支持。
钓鱼链路
这种钓鱼比 setApprovalForAll 更隐蔽。NFT 那个弹窗里你至少能看到 setApprovalForAll 几个字 —— 哪怕你看不懂也知道是签合约。
Permit 钓鱼的弹窗里只是一段 EIP-712 结构化数据:Owner / Spender / Value / Nonce / Deadline。早期版本 MetaMask 显示的是一段乱码哈希,普通用户看到完全无感。一句"领取空投,请签名验证"足以骗过 90% 的人。
用户签完,攻击者拿着这条签名调 USDC 合约的 permit 函数,再调 transferFrom,钱包里的 USDC 全部走人。这个过程用户连一次链上交易都没发出去 —— 但损失已经发生。
识别要点
看到 EIP-712 签名弹窗就要警觉。重点看四个字段:Owner(是不是你自己)、Spender(要跟你做的事对得上)、Value(看到 uint256.max 那种天文数字直接关掉)、Deadline(合理应用一般签 1 小时内的窗口)。
防御工具
MetaMask 2024 年起内置了 "Signature Insight",对 permit 类签名会做风险标注。再叠一个 Wallet Guard 或 Pocket Universe 插件做合约白名单检查。
事后撤销:Revoke.cash 可以查到代币的 permit nonce 状态 —— 万一签过钓鱼 permit,立即转走或销毁这笔代币的余额是唯一止损路径(签名本身没法"撤销",但可以让攻击者拿到时已经空了)。
完整图谱见 钓鱼诈骗全图谱 · 2026 版。MetaMask 的相关安全开关详见 MetaMask 安全使用。