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
maxAmountRequiredand 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)