the standard · since April 2020
// standard · permit · erc-20 extension · ready

What is ERC-2612?

Gasless ERC-20 approval by signature - useful, but still allowance.

ERC-2612 ·EIP-2612 ·by Merunas Grincalaitis + Theo Diamandis + Joey Santoro + Ross Campbell + Marcin Arys

updated · 2 min read · by ercs-solved maintainers

ERC-2612 is the standard behind "permit" in ERC-20 flows. Instead of sending approve first, the token holder signs an EIP-712 approval message and the app submits it alongside the action that needs the allowance.

on this page
  1. What is ERC-2612?
  2. At a glance
  3. Origin story
  4. The spec
  5. What's broken
  6. Permit still creates allowance
  7. Every token has to implement it
  8. signature is only as clear as the wallet UI
  9. LUKSO alternative
  10. ERC-2612 vs LSP25+LSP6
  11. When to use which
  12. FAQ
  13. Sources
  14. Keep reading
at a glance

The standard, in one card.

Standard
ERC-2612 / EIP-2612
Extends
ERC-20
Signature format
EIP-712 typed data
Core function
permit(owner, spender, value, deadline, v, r, s)
how the standard came to be

The origin story.#

Permit emerged from the same pressure that made ERC-20 allowances painful: users needed ETH to approve a token before they could use the token. ERC-2612 standardized the permit shape so wallets and protocols could support gasless approvals consistently.

the spec, end to end

What ERC-2612 actually is.#

ERC-2612 EIP-2612 interface solidity
function permit(
  address owner,
  address spender,
  uint256 value,
  uint256 deadline,
  uint8 v,
  bytes32 r,
  bytes32 s
) external;

function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
ERC-2612 interface, grouped
write: permit
read: nonces · DOMAIN_SEPARATOR
inherits: allowance · transferFrom

permit verifies the owner's signature, checks the nonce and deadline, then writes allowance[owner][spender] = value. nonces prevents replay. DOMAIN_SEPARATOR binds the signature to a chain and token contract.

the integration tax

What's broken about ERC-2612.#

The approval transaction disappeared, but the approval risk did not. A bad spender, misleading typed-data prompt, or overbroad signed value still leaves a spender with transferFrom power.

  1. Permit still creates allowance.#

    The signature removes the approve transaction, but the end state is the same ERC-20 approval table. The spender still receives a value-limited permission inside the token contract.

    ERC-2612 permit(...) -> allowance
    signature UX same spender model
    LSP6 account permission
    call-scoped revocable
    workarounds tried
    • short deadlines
    • exact values
    • Permit2 scoped signatures
    • approval revocation

    read the deep-dive

  2. Every token has to implement it.#

    Permit is an ERC-20 extension, not a universal router. Tokens without ERC-2612 cannot be approved by this path, and implementations can diverge in domain separators, nonces, or wallet support.

    ERC-2612 token implements permit
    per-token optional
    LSP25 account relay call
    account-native one relay shape
    workarounds tried
    • Permit2
    • custom permit adapters
    • fallback approve transactions
  3. The signature is only as clear as the wallet UI.#

    EIP-712 improves structured signing, but users still have to understand spender, value, nonce, and deadline. If the wallet renders the typed data poorly, permit can still become a phishing surface.

    permit sign typed approval
    off-chain phishable
    LSP6 named controller
    account visible auditable
    workarounds tried
    • human-readable wallet prompts
    • simulation
    • spender reputation
the LUKSO alternative

LUKSO designed it differently.#

LSP25 handles the "someone else pays gas" part at the account layer, while LSP6 handles "what may this signer do?" as account policy. That splits the two concerns ERC-2612 has to compress into one token-level permit.

spec to spec, at a glance

ERC-2612 vs LSP25+LSP6 in one table.#

row ERC-2612 LSP relay and permission stack
primary goal set ERC-20 allowance by signature relay account execution and scope permissions
state changed token allowance mapping account call path / controller permission
gasless scope approval only any permitted account call
spender risk still present bounded by LSP6 permission
be honest about scope

When to use which.#

people also ask

FAQ.#

  • What does ERC-2612 add to ERC-20? #

    It adds permit, nonces, and DOMAIN_SEPARATOR. permit lets an ERC-20 holder sign an approval off-chain and have someone else submit it on-chain.

  • Is ERC-2612 the same as Permit2? #

    No. ERC-2612 is a token-level extension each token implements. Permit2 is an external shared approval contract from Uniswap that can support tokens even when they do not implement ERC-2612.

  • Does ERC-2612 make approvals safe? #

    It improves approval UX and reduces the need for a separate approve transaction. The resulting permission is still ERC-20 allowance, so spender selection, amount, deadline, and wallet display still matter.

primary sources

Where this page draws from.#

  1. EIP-2612