Why Fee Abstraction Matters
On most EVM chains, users must hold the native token to pay for gas. This creates friction: a user who receives USDC on Celo can’t send it anywhere without first acquiring CELO. Fee abstraction removes this barrier entirely. With fee abstraction, a user holding only USDC can send transactions, interact with contracts, and pay gas — all in USDC. No bridging, no swaps, no extra steps. This is especially valuable for:- Onboarding new users who receive stablecoins but don’t know about gas tokens
- Payment applications where users transact in a single currency end-to-end
- AI agents that operate autonomously with a single token balance
How It Works
Fee abstraction is built into the Celo protocol at the node level — it is not a paymaster or relayer. When a transaction includes afeeCurrency field, the Celo blockchain:
- Calls
debitGasFeeson the fee currency contract to reserve the maximum gas cost - Executes the transaction normally
- Calls
creditGasFeesto refund unused gas and distribute fees to block producers
feeCurrency property on the transaction object.
For implementation details, see Using Fee Abstraction. To add a new fee currency to the protocol, see Adding Fee Currencies.
Wallet support for CIP-64
The protocol accepts afeeCurrency transaction from any account, but something has to build that transaction. feeCurrency is a field on the CIP-64 transaction type, so the wallet signing it must implement CIP-64. Setting feeCurrency in your app is necessary but not sufficient: whether it takes effect is decided by the wallet your user brings.
A wallet not listed here has not been confirmed either way. Check with the wallet before assuming. If a flow depends on fee abstraction, such as onboarding a user who holds no CELO, either target a wallet on this list or keep a path that works when gas is charged in CELO.
Library support is a separate question from wallet support, and a library in a wallet’s stack says nothing about whether that wallet forwards an app’s
feeCurrency. For viem, Ethers.js and web3.js, see Using Fee Abstraction.
Whitelisted Fee Currencies (Mainnet)
The full up-to-date list of whitelisted fee currencies — including token and adapter addresses — is automatically maintained at Fee Currencies. Tokens with non-18 decimals (e.g. USDC, USD₮, USA₮ with 6 decimals) require an adapter contract. Use the adapter address — not the token address — in thefeeCurrency field. See the adapter table in Using Fee Abstraction.
Related
- Fee Abstraction for AI Agents — Using fee abstraction in autonomous agent backends
- x402: Agent Payments — HTTP-native stablecoin payments for agents
- Using Fee Abstraction — How to pay gas with alternate fee currencies in your transactions
- Adding Fee Currencies — How to implement and register a new fee currency
- Celo Wallets — The wallets Celo documents, including the ones in the table above