Skip to main content

General structure

Authorization type structures

EIP-3009 (transferWithAuthorization)

EIP-2612 Permit

Permit2 (optional Witness)

EIP-712 key fields

  • domain: name/version/chainId/verifyingContract
  • types: varies by authorization type (TransferWithAuthorization/Permit/Permit2)
  • message: authorization payload (amount/nonce/deadline, etc.)

Example (EIP-3009)

Example (Permit2 with Witness)

Server-side validation checklist

  • Version/scheme/network match the requirements
  • Authorization signature is valid; signer matches owner/from
  • Token/recipient match: token === asset, to/spender === payTo
  • Amount and validity: meet maxAmountRequired and not expired
  • Nonce/balance: unused and sufficient balance (type-specific checks)

Key validations

  • Version/scheme/network match the requirements
  • Amount ≥ maxAmountRequired
  • Deadline has not expired
  • spender === payTo (EIP-7702 enforces minimal trust)

Example (Permit)