Skip to main content
Fee abstraction is one of Celo’s core protocol features. It allows users to pay gas fees in ERC20 tokens β€” like USDC, USDT, or Mento stablecoins β€” instead of needing to hold the native CELO token.

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 a feeCurrency field, the Celo blockchain:
  1. Calls debitGasFees on the fee currency contract to reserve the maximum gas cost
  2. Executes the transaction normally
  3. Calls creditGasFees to refund unused gas and distribute fees to block producers
This means fee abstraction works with any externally owned account (EOA). No smart contract wallets, no relayers, no extra infrastructure needed. To use an alternate fee currency, set its token or adapter address as the 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.

Allowlisted Fee Currencies

The protocol maintains a governable allowlist of smart contract addresses that can be used as fee currencies. These contracts implement an extension of the ERC20 interface with additional functions for debiting and crediting transaction fees (see Adding Fee Currencies). To fetch the current allowlist, call getCurrencies() on the FeeCurrencyDirectory contract, or use celocli:
# Celo Sepolia testnet
celocli network:whitelist --node celo-sepolia

# Celo mainnet
celocli network:whitelist --node https://forno.celo.org

Adapters for Non-18-Decimal Tokens

After Contract Release 11, allowlisted addresses may be adapters rather than full ERC20 tokens. Adapters are used when a token has decimals other than 18 (e.g., USDC and USDT use 6 decimals). The Celo blockchain calculates gas pricing in 18 decimals, so adapters normalize the value.
  • For transfers: use the token address as usual.
  • For feeCurrency: use the adapter address.
  • For balanceOf: querying via the adapter returns the balance as if the token had 18 decimals β€” useful for checking whether an account can cover gas without converting units.
To get the underlying token address for an adapter, call adaptedToken() on the adapter contract. For more on gas pricing, see Gas Pricing.

Adapter Addresses

Mainnet

Celo Sepolia (Testnet)