

















在 Web3 里,“授权”是资产安全与交易体验的核心机制。
很多人会混淆三件事:
approve(链上授权)
EIP-2612 permit(签名授权)
Permit2(通用签名授权协议)
它们表面都是“允许别人动你的资产”,但底层机制完全不同,尤其是在:
nonce 如何设计、谁能发起交易、权限如何生效
这些关键点上差异巨大。
mapping(address => mapping(address => uint256)) allowance;
用户必须发起链上交易:
approve(spender, amount)
用户必须自己发交易
授权被写入链上状态
之后 spender 才能调用:
transferFrom()
👉 使用的是 EVM account nonce
| 类型 | 来源 |
|---|---|
| account nonce | EOA 交易 nonce |
只能用户自己发 approve
链上存储 allowance = 授权记录
👉 属于“状态授权”,不是签名授权
必须支付 gas
UX 差(要 approve + swap 两步)
无限授权风险(常见安全问题)
USD Coin 等 ERC20 常用实现
用签名替代 approve 交易
用户只需要:
离线签名 Permit
无需上链 approve。
Permit(
owner,
spender,
value,
nonce,
deadline
)
mapping(address => uint256) public nonces;
👉 注意:
这是 permit nonce
不是 EVM transaction nonce
每成功执行一次 permit() → nonce +1
必须严格递增使用
任何人都可以:
DEX
Relayer
钱包
聚合器
只要提交签名即可。
ecrecover(signature) == owner
验证通过后:
allowance[owner][spender] = value;
| 项目 | 说明 |
|---|---|
| 是否上链 approve | ❌ 不需要 |
| 是否需要 gas | ❌ 用户不需要 |
| nonce 类型 | permit nonce |
| nonce 特性 | 严格递增 |
| 顺序要求 | 必须按顺序 |
EIP-2612 的 nonce 是:
❗严格递增模型(Sequential Nonce)
如果签名顺序错乱:
跳过 nonce → 后续可能失效
顺序错 → revert
Uniswap Labs
Permit2 解决的是:
Permit 的 nonce 顺序限制 + 多协议授权碎片化问题
mapping(address => uint256) public nonceBitmap;
每个用户有:
uint256 bitmap = 256 个 nonce 状态
每一位表示:
| bit | nonce |
|---|---|
| 0 | nonce 0 |
| 1 | nonce 1 |
| ... | ... |
| 255 | nonce 255 |
👉 完全非顺序模型:
nonce 3 可以先用
nonce 99 后用
不影响其他 nonce
用户签名:
nonce 3
nonce 10
nonce 5
可以任意顺序执行:
先用 10 → OK
再用 3 → OK
再用 5 → OK
和 Permit 一样:
DEX
Aggregator
Relayer
钱包
Permit2 会验证:
signature + allowance + bitmap nonce
最终执行:
transferFrom(owner, receiver, amount)
Permit2 =
签名授权 + 可并发 nonce + 统一授权中介层
| 维度 | Approve | Permit | Permit2 |
|---|---|---|---|
| 是否需要交易 | ✔ | ❌ | ❌ |
| 是否需要签名 | ❌ | ✔ | ✔ |
| nonce 类型 | EVM nonce | ERC20 nonce | bitmap nonce |
| nonce 顺序 | 顺序 | 严格顺序 | 任意顺序 |
| 是否支持乱序执行 | ❌ | ❌ | ✔ |
| 是否支持批量签名 | ❌ | 弱 | 强 |
| UX | 差 | 好 | 最好 |
allowance 写入链上
签名 → 生成 allowance
签名 → Permit2 → 执行 transferFrom
防交易重放
每笔交易 +1
防签名重放
严格递增
防签名重放
可乱序
256 位管理
因为它解决了三个问题:
✔ Permit 必须顺序
✔ Permit2 可以乱序
✔ Permit2 支持批量签名执行
✔ 一个授权覆盖多个 DEX / 聚合器
Approve 是链上状态授权;Permit 是签名生成授权(但严格顺序 nonce);Permit2 是工业级签名授权系统,通过 bitmap nonce 实现乱序执行与批量授权,彻底优化 Web3 授权体验。
如果你愿意,我可以再帮你补一版更“进阶开发者视角”的内容,比如:
Permit2 如何防重放攻击
EIP-712 在三者中的作用
真实黑客利用 approve 的攻击路径
Uniswap router + Permit2 实际调用链路图
会更偏“安全审计/底层协议分析级别”。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。