Permit or approve? Choose by token support and transaction design
Use ERC-2612 permit when the token and spender support it and a signed allowance can join the action; use approve for wider compatibility and direct control.
The Chain Media Editors5 min read
Use an ERC-2612 permit when the token supports it and the spender can use the signature in the same transaction as the token action; use approve when compatibility or a separate, direct allowance update matters more. Both mechanisms set the ERC-20 allowance that lets a spender call transferFrom. The difference is how that permission reaches the token contract: approve is an onchain transaction from the token owner, while permit is an offchain signature that someone submits onchain.
That distinction changes the transaction flow, not the power granted. A permit can save the owner a separate approval transaction, but it does not by itself make an allowance safer or make a swap cheaper in every case. Route choice is a separate decision; this guide to choosing a Quickswap route from your wallet covers how to compare paths. The allowance still belongs to the token contract and names a spender and amount.
How does an ERC-2612 permit work?
An ERC-2612 permit lets the token owner sign a typed message that authorizes a specific spender and allowance amount. The signature includes a deadline and uses an owner nonce, so the token can reject expired or already-used signatures. The token’s permit function verifies the signature, updates its allowance mapping, increments the nonce, and emits an Approval event.
The owner signs offchain, so signing alone does not change token state and does not require the owner to send a transaction or pay its gas. A relayer, the spender, or another account can submit the signature. The submitter pays the transaction gas. An application can include the permit call and its token action in one transaction, allowing the allowance update and the subsequent transferFrom to succeed or revert together.
The signature fixes the token contract, chain context, owner, spender, amount, nonce, and deadline through the typed data and domain used by the implementation. A holder should check those fields in the wallet prompt. Anyone may submit a valid permit, but they cannot change its signed terms. If someone submits it first, the nonce is consumed and the allowance takes effect; the intended application must account for that case.
When is a regular token approval the better choice?
Use approve when the token or application does not support the permit flow, or when a wallet or contract account cannot produce a signature the token accepts. ERC-20 approval is the broadly supported path: the owner sends a transaction to the token contract, which writes the allowance. It costs the owner gas in the chain’s native fee token and usually means one transaction for approval and another for the application action.
Approval also makes the state change explicit before the application call. The owner can inspect the allowance later and set it to zero or another amount with a new approval. Under the ERC-20 interface, a new approve call replaces the current allowance with the requested value; it does not add to it. Some tokens impose additional behavior, so applications should handle token-specific failures rather than assume every implementation behaves identically.
Permit is not a universal replacement for approval. It requires support from the token contract and from the application’s spender logic. A token may expose a permit-like function with different parameters or semantics, so an interface that expects ERC-2612 cannot assume any function named permit is compatible.
What allowance does a permit leave behind?
A permit deadline limits when the signature may be submitted. It does not make the resulting allowance expire. Once the token accepts the permit, the allowance remains subject to ordinary ERC-20 rules: it persists until consumed or changed by a later approval or token-specific mechanism. Set the signed amount to the amount the application needs when the integration supports that choice; unlimited allowances reduce repeat prompts but leave a larger permission in place.
There is also a transaction-order edge case. A permit is an independently submit-able authorization. If another party submits it before the application’s combined transaction, the combined call’s attempt to execute the same permit can fail because the nonce has advanced. A well-built integration can check the existing allowance or catch a failed permit call, then continue only if the required allowance is present. The application must still enforce its own action parameters and access rules.
How should I choose between permit and approve?
Choose permit when the token and spender both support the same permit standard, the wallet can sign the required message, and the application can use the signature safely in its transaction flow. It is most useful when removing a separate approval transaction improves the interaction or lets a relayer cover gas. Choose approve when compatibility is uncertain, the application expects an existing allowance, or you prefer to make the allowance update as its own onchain action.
- Confirm the token contract supports the specific permit interface the application expects.
- Check the signed spender, amount, chain, and deadline before approving the signature.
- Remember that signature expiry does not revoke an allowance already set onchain.
- For either path, grant only the allowance needed when the application permits it.
For most users, permit is the better interaction when it is supported end to end: it can combine authorization and use into one transaction. Approval remains the dependable fallback because it relies on the standard allowance path. The key choice is not which prompt looks simpler; it is whether the token and spender implement the same mechanics and whether the resulting allowance matches the action.