Overview
Last modified:
Permit2 is a universal token approval contract that consolidates two distinct permission models into one system:
- SignatureTransfer — one-time, signature-scoped permissions. The spender can move tokens only within the transaction where the signature is consumed. No persistent on-chain allowance is set.
- AllowanceTransfer — time-bound, amount-capped allowances. The owner signs (or calls
approve) to grant a spender a specific amount for a specific duration. Subsequent transfers draw down from this allowance without additional signatures.
Why Permit2 exists
The standard ERC-20 approve → transferFrom flow requires a separate on-chain transaction for every new spender. Permit2 replaces this pattern: users grant a single max-approval to the Permit2 contract, and then use off-chain signatures to authorize individual spenders — eliminating repeated approval transactions and giving users fine-grained, revocable control over who can spend what, for how long.
Approving Permit2
Before any integrating contract can request tokens through Permit2, the user must approve the Permit2 contract on the underlying token:
USDC.approve(permit2Address, type(uint256).max);A max-approval is recommended to capture the full benefit — individual spending limits are then enforced at the Permit2 layer, not the token layer.