EIP-3009, "transfer with authorization", lets a token holder sign a transfer off-chain and have someone else submit it. The holder needs no ETH for gas: a relayer, your backend or the recipient submits the signed authorization and pays the gas. It is best known as the mechanism behind gasless transfers of USDC, which makes it very practical for payment flows in stablecoins.
How It Works
- The holder signs an EIP-712 message: from, to, amount, a time window (valid after, valid before) and a nonce.
- Anyone can submit it with
transferWithAuthorization; the token contract checks the signature and executes the transfer. - With
receiveWithAuthorization, only the recipient can submit it, which matters when a contract receives the payment. - An unused authorization can be cancelled with
cancelAuthorization.
Want users to transact without holding gas? See gasless transactions for every method, from paymaster sponsorship and EIP-7702 to relayers and permit signatures.
EIP-3009 vs. Permit
Permit (EIP-2612) signs an approval: someone may spend your tokens later. EIP-3009 signs the transfer itself, with an exact amount and recipient. Another key difference is the nonce: permit uses sequential nonces, so signatures must be used in order; EIP-3009 uses random 32-byte nonces, so many authorizations can be outstanding and used in any order. That makes it well suited to payments, subscriptions and high-volume backends.
Integrating It Safely
- Use receiveWithAuthorization in contracts: if a contract calls transferWithAuthorization, someone watching the mempool can submit the same authorization first; the transfer still happens, but your contract's logic around it does not run.
- Short validity windows: authorizations that expire quickly limit the damage of a leaked signature.
- Clear signing: users should see recipient and amount in plain terms, see blind signing prevention.
- Token support: only tokens that implement EIP-3009, such as USDC, support this flow; other tokens need permit or a different approach.
Frequently Asked Questions about EIP-3009
Which tokens support EIP-3009?
USDC is the best-known example, along with some other tokens from the same issuer. Most ERC-20 tokens do not, so check support for each token you plan to accept.
Who pays the gas?
Whoever submits the authorization: usually your backend or a relayer. You can recover that cost in your pricing or treat it as part of the user experience.
Can a signed authorization be revoked?
Yes, as long as it has not been used, with cancelAuthorization. Short validity windows reduce the need for it.
Who owns the code?
Ownership of the source code is set out in the contract, and the code can be fully yours, including documentation and tests.
Part of our work on Ethereum standards (EIPs and ERCs) and smart contract development.
See our USDC-denominated cross-chain trading app for signature-based flows in practice.
Build Gasless USDC Payments
Tell us how your users pay and who should cover the gas. We will design a signed-transfer flow that is smooth and safe.