# Celo Stablecoins

> Working with Celo's stablecoin ecosystem. Use when building with USDm, EURm, USDC, USDT, or regional Mento stablecoins on Celo.

- Skill: `johnalbertini14-glitch/celo-stablecoins` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add johnalbertini14-glitch/celo-stablecoins`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnalbertini14-glitch/celo-stablecoins/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: Apache-2.0
- Author: johnalbertini14-glitch (https://skillmd.com/u/johnalbertini14-glitch)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/johnalbertini14-glitch/celo-stablecoins

---


# Celo Stablecoins

This skill covers working with stablecoins on the Celo blockchain, including Mento stablecoins and other major stablecoins.

## When to Use

- Reading stablecoin balances
- Transferring stablecoins
- Building payment applications
- Working with regional currencies
- Integrating USDC or USDT on Celo

## Stablecoin Categories

### Mento Stablecoins

Mento Protocol provides decentralized stablecoins pegged to various fiat currencies:

| Symbol | Currency | Mainnet Address |
|--------|----------|-----------------|
| USDm | US Dollar | 0x765de816845861e75a25fca122bb6898b8b1282a |
| EURm | Euro | 0xd8763cba276a3738e6de85b4b3bf5fded6d6ca73 |
| BRLm | Brazilian Real | 0xe8537a3d056da446677b9e9d6c5db704eaab4787 |
| XOFm | West African CFA Franc | 0x73F93dcc49cB8A239e2032663e9475dd5ef29A08 |
| KESm | Kenyan Shilling | 0x456a3D042C0DbD3db53D5489e98dFb038553B0d0 |
| PHPm | Philippine Peso | 0x105d4A9306D2E55a71d2Eb95B81553AE1dC20d7B |
| COPm | Colombian Peso | 0x8a567e2ae79ca692bd748ab832081c45de4041ea |
| GBPm | British Pound | 0xCCF663b1fF11028f0b19058d0f7B674004a40746 |
| CADm | Canadian Dollar | 0xff4Ab19391af240c311c54200a492233052B6325 |
| AUDm | Australian Dollar | 0x7175504C455076F15c04A2F90a8e352281F492F9 |
| ZARm | South African Rand | 0x4c35853A3B4e647fD266f4de678dCc8fEC410BF6 |
| GHSm | Ghanaian Cedi | 0xfAeA5F3404bbA20D3cc2f8C4B0A888F55a3c7313 |
| NGNm | Nigerian Naira | 0xE2702Bd97ee33c88c8f6f92DA3B733608aa76F71 |
| JPYm | Japanese Yen | 0xc45eCF20f3CD864B32D9794d6f76814aE8892e20 |
| CHFm | Swiss Franc | 0xb55a79F398E759E43C95b979163f30eC87Ee131D |

### Centralized Stablecoins

| Symbol | Issuer | Mainnet Address | Decimals |
|--------|--------|-----------------|----------|
| USDC | Circle | 0xcebA9300f2b948710d2653dD7B07f33A8B32118C | 6 |
| USDT | Tether | 0x48065fbbe25f71c9282ddf5e1cd6d6a887483d5e | 6 |

### Other Stablecoins

| Symbol | Issuer | Currency | Mainnet Address |
|--------|--------|----------|-----------------|
| vEUR | VNX | Euro | 0x9346f43c1588b6df1d52bdd6bf846064f92d9cba |
| vGBP | VNX | British Pound | 0x7ae4265ecfc1f31bc0e112dfcfe3d78e01f4bb7f |
| vCHF | VNX | Swiss Franc | 0xc5ebea9984c485ec5d58ca5a2d376620d93af871 |
| USDM | Mountain Protocol | US Dollar (yield-bearing) | 0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C |
| USDA | Angle | US Dollar (yield-bearing) | 0x0000206329b97DB379d5E1Bf586BbDB969C63274 |
| EURA | Angle | Euro (yield-bearing) | 0xC16B81Af351BA9e64C1a069E3Ab18c244A1E3049 |
| USDGLO | Glo Foundation | US Dollar (impact-driven) | 0x4f604735c1cf31399c6e711d5962b2b3e0225ad3 |
| BRLA | BRLA Digital | Brazilian Real | 0xfecb3f7c54e2caae9dc6ac9060a822d47e053760 |
| COPM | Minteo | Colombian Peso | 0xC92E8Fc2947E32F2B574CCA9F2F12097A71d5606 |
| G$ | GoodDollar | UBI Token | 0x62b8b11039fcfe5ab0c56e502b1c372a3d2a9c7a |

## Testnet Addresses (Celo Sepolia)

| Symbol | Testnet Address |
|--------|-----------------|
| USDm | 0xdE9e4C3ce781b4bA68120d6261cbad65ce0aB00b |
| EURm | 0xA99dC247d6b7B2E3ab48a1fEE101b83cD6aCd82a |
| BRLm | 0x2294298942fdc79417DE9E0D740A4957E0e7783a |
| XOFm | 0x5505b70207aE3B826c1A7607F19F3Bf73444A082 |
| KESm | 0xC7e4635651E3e3Af82b61d3E23c159438daE3BbF |
| PHPm | 0x0352976d940a2C3FBa0C3623198947Ee1d17869E |
| COPm | 0x5F8d55c3627d2dc0a2B4afa798f877242F382F67 |
| GBPm | 0x85F5181Abdbf0e1814Fc4358582Ae07b8eBA3aF3 |
| CADm | 0xF151c9a13b78C84f93f50B8b3bC689fedc134F60 |
| AUDm | 0x5873Faeb42F3563dcD77F0fbbdA818E6d6DA3139 |
| ZARm | 0x10CCfB235b0E1Ed394bACE4560C3ed016697687e |
| GHSm | 0x5e94B8C872bD47BC4255E60ECBF44D5E66e7401C |
| NGNm | 0x3d5ae86F34E2a82771496D140daFAEf3789dF888 |
| JPYm | 0x85Bee67D435A39f7467a8a9DE34a5B73D25Df426 |
| CHFm | 0x284E9b7B623eAE866914b7FA0eB720C2Bb3C2980 |
| USDT | 0xd077A400968890Eacc75cdc901F0356c943e4fDb |

## Reading Balances

### Using viem

```typescript
import { createPublicClient, http, formatUnits } from "viem";
import { celo } from "viem/chains";

const publicClient = createPublicClient({
  chain: celo,
  transport: http("https://forno.celo.org"),
});

const ERC20_ABI = [
  {
    name: "balanceOf",
    type: "function",
    stateMutability: "view",
    inputs: [{ name: "account", type: "address" }],
    outputs: [{ type: "uint256" }],
  },
  {
    name: "decimals",
    type: "function",
    stateMutability: "view",
    inputs: [],
    outputs: [{ type: "uint8" }],
  },
] as const;

// USDm (18 decimals)
const USDm = "0x765de816845861e75a25fca122bb6898b8b1282a";

const balance = await publicClient.readContract({
  address: USDm,
  abi: ERC20_ABI,
  functionName: "balanceOf",
  args: ["0xYourAddress"],
});

console.log("USDm Balance:", formatUnits(balance, 18));

// USDC (6 decimals)
const USDC = "0xcebA9300f2b948710d2653dD7B07f33A8B32118C";

const usdcBalance = await publicClient.readContract({
  address: USDC,
  abi: ERC20_ABI,
  functionName: "balanceOf",
  args: ["0xYourAddress"],
});

console.log("USDC Balance:", formatUnits(usdcBalance, 6));
```

## Transferring Stablecoins

### Using viem

```typescript
import { createWalletClient, http, parseUnits } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { celo } from "viem/chains";

const account = privateKeyToAccount("0xYourPrivateKey");

const walletClient = createWalletClient({
  account,
  chain: celo,
  transport: http("https://forno.celo.org"),
});

const ERC20_ABI = [
  {
    name: "transfer",
    type: "function",
    stateMutability: "nonpayable",
    inputs: [
      { name: "to", type: "address" },
      { name: "amount", type: "uint256" },
    ],
    outputs: [{ type: "bool" }],
  },
] as const;

const USDm = "0x765de816845861e75a25fca122bb6898b8b1282a";

// Transfer 10 USDm
const hash = await walletClient.writeContract({
  address: USDm,
  abi: ERC20_ABI,
  functionName: "transfer",
  args: ["0xRecipientAddress", parseUnits("10", 18)],
});

console.log("Transaction hash:", hash);
```

### Transfer USDC (6 decimals)

```typescript
const USDC = "0xcebA9300f2b948710d2653dD7B07f33A8B32118C";

// Transfer 10 USDC (note: 6 decimals)
const hash = await walletClient.writeContract({
  address: USDC,
  abi: ERC20_ABI,
  functionName: "transfer",
  args: ["0xRecipientAddress", parseUnits("10", 6)],
});
```

## Using cast (Foundry)

```bash
# Check USDm balance
cast call 0x765de816845861e75a25fca122bb6898b8b1282a \
  "balanceOf(address)(uint256)" \
  0xYourAddress \
  --rpc-url https://forno.celo.org

# Transfer USDm
cast send 0x765de816845861e75a25fca122bb6898b8b1282a \
  "transfer(address,uint256)" \
  0xRecipientAddress \
  10000000000000000000 \
  --rpc-url https://forno.celo.org \
  --private-key $PRIVATE_KEY
```

## Decimal Handling

| Token Type | Decimals | 1 Token in Wei |
|------------|----------|----------------|
| Mento (USDm, EURm, etc.) | 18 | 1000000000000000000 |
| USDC | 6 | 1000000 |
| USDT | 6 | 1000000 |

Always check the decimals of a token before formatting or parsing amounts.

## Getting Test Tokens

1. Get CELO from faucet: https://faucet.celo.org
2. Swap CELO for stablecoins on Mento: https://app.mento.org

## Additional Resources

- [token-addresses.md](references/token-addresses.md) - Complete token address reference

