W3
EIP-2612EIP签名Final(2020-04-28)

Permit · 无 Gas 授权

把 approve 变成一次链下签名 + 由第三方代提交,用户无需先花一笔 Gas 授权。

适用链:多数现代 ERC-20(USDC / DAI / UNI 等)

为什么重要:改善体验的同时引入新风险:Permit 签名的钓鱼就是靠它绕过「先授权」这一步意识。

函数签名与选择器

选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。

签名 / 字段选择器 / topic0说明
permit(address,address,uint256,uint256,uint8,bytes32,bytes32)owner / spender / value / deadline / v / r / s,一次交易完成授权。
nonces(address)每个 owner 的签名序号,防重放的关键。
DOMAIN_SEPARATOR()EIP-712 域分隔符,绑定 chainId 与合约地址。

代码模板

前端签名 + 后端代提交
前端签名 + 后端代提交TypeScript

实现与使用时的常见陷阱

  • value 给 type(uint256).max 的 Permit 就等于「无限授权」,签名前务必核对数额与 spender。
  • deadline 设得太远(或 0)等于长期有效的空白支票。
  • nonce 必须从链上读,自己猜会让签名直接失效。
  • 不是所有 ERC-20 都实现了 permit,调用前先用 supportsInterface 或读 DOMAIN_SEPARATOR 探测。

相关标准

同属「签名」的其他标准
想把这个标准用起来?开发者路径的第 1–2 阶段讲了怎么把它写进项目;合约 IDE里有对应的可编辑模板与静态自检;链上 API 参考则给出前端调用它的三种写法。