Tokens (USDT, USDC, IMC)
ERC-20 token contracts deployed on Celo Sepolia.
Token Registry
| Symbol | Name | Contract | Decimals | Deployer |
|---|---|---|---|---|
| USDT | Tether USD (mock) | 0x3C8EB6c8DF02B43a7bae71314917aCBdd60edDDF | 6 | Relayer (0x40e4F07Dfd80A3043577142df072Afe3E4653928) |
| USDC | USD Coin (mock) | 0x82DD8420f1a403a947c6cFFBFaEa81e0296262A7 | 6 | Relayer (0x40e4F07Dfd80A3043577142df072Afe3E4653928) |
| IMC | ImpalaCoin | 0xF150E30B1C7Ab81938d650567D1454Ee0132d5A2 | 6 | Relayer (0x40e4F07Dfd80A3043577142df072Afe3E4653928) |
ERC-20 Functions Used
| Function | Caller | Description |
|---|---|---|
mint(address to, uint256 amount) | Relayer | Mint tokens to user wallet |
burn(address from, uint256 amount) | Relayer | Burn tokens (via approval) |
approve(address spender, uint256 amount) | User wallet | Approve router/spender |
transfer(address to, uint256 amount) | User wallet | Direct transfer |
balanceOf(address owner) | Comet Engine | Query balance |
allowance(address owner, address spender) | Comet Engine | Check allowance |
Gas Pattern
All token operations use gas relaying:
ensureGas()checks user wallet CELO balance- If below threshold, tops up from relayer
- User signs the transaction (key decrypted in memory)
- 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
- Write contract inheriting from
ERC20,Ownable - Add
CELO_<SYMBOL>_CONTRACTenv var to comet-engine - Engine auto-discovers the asset at startup
- Add symbol mapping to frontend (FusionFy, app-dashboard)