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.
Fee currencies and adapters
The allowlist, with token and adapter addresses for each network, is on Fee currency contracts. Tokens with 6 decimals (USDC, USDT, USAâ‚®) go through an adapter, and the adapter address, not the token address, is thefeeCurrency value; see adapters for non-18-decimal tokens.
Related
- Fee currency contracts — Allowlisted tokens with their
feeCurrencyand token addresses - Fee abstraction specification — Protocol rules, JSON-RPC changes and node flags
- 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
- Wallets for users — Wallets a holder can install, including the ones in the table above
- Wallet integration — Providers an app can integrate to add wallets