Skip to content

Tokens (USDT, USDC, IMC)

ERC-20 token contracts deployed on Celo Sepolia.

Token Registry

SymbolNameContractDecimalsDeployer
USDTTether USD (mock)0x3C8EB6c8DF02B43a7bae71314917aCBdd60edDDF6Relayer (0x40e4F07Dfd80A3043577142df072Afe3E4653928)
USDCUSD Coin (mock)0x82DD8420f1a403a947c6cFFBFaEa81e0296262A76Relayer (0x40e4F07Dfd80A3043577142df072Afe3E4653928)
IMCImpalaCoin0xF150E30B1C7Ab81938d650567D1454Ee0132d5A26Relayer (0x40e4F07Dfd80A3043577142df072Afe3E4653928)

ERC-20 Functions Used

FunctionCallerDescription
mint(address to, uint256 amount)RelayerMint tokens to user wallet
burn(address from, uint256 amount)RelayerBurn tokens (via approval)
approve(address spender, uint256 amount)User walletApprove router/spender
transfer(address to, uint256 amount)User walletDirect transfer
balanceOf(address owner)Comet EngineQuery balance
allowance(address owner, address spender)Comet EngineCheck allowance

Gas Pattern

All token operations use gas relaying:

  1. ensureGas() checks user wallet CELO balance
  2. If below threshold, tops up from relayer
  3. User signs the transaction (key decrypted in memory)
  4. Transaction is sent with relayer's nonce

Import Addresses

Solidity imports use named imports:

solidity
import { IERC20 as IERC20ForRouter } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

Deploying New Tokens

  1. Write contract inheriting from ERC20, Ownable
  2. Add CELO_<SYMBOL>_CONTRACT env var to comet-engine
  3. Engine auto-discovers the asset at startup
  4. Add symbol mapping to frontend (FusionFy, app-dashboard)

Released under the MIT License.