Install
openclaw skills install celo-agent-skillsEnd-to-end Celo development playbook (Feb 2026). Prefer viem for all client/transaction code (native fee currency support via CIP-64). Use thirdweb for wallet connection and React dApps. Foundry for smart contract development. Covers fee abstraction (pay gas in USDC/USDT/USDm), MiniPay Mini Apps, stablecoin integration, and AI agent infrastructure (ERC-8004 trust + x402 payments).
openclaw skills install celo-agent-skillsUse this Skill when the user asks for:
Celo dApp UI work (React / Next.js)
Wallet connection + fee currency selection
Transactions paying gas in stablecoins (USDC, USDT, USDm)
MiniPay Mini App development
Smart contract development, testing, and deployment
Stablecoin integration (Mento + bridged)
AI agent infrastructure (ERC-8004 identity/reputation, x402 payments)
viem is REQUIRED for fee abstraction (ethers.js/web3.js don't support feeCurrency)
Use viem/celo for Celo-specific transaction serialization
Never use ethers.js for new Celo projects
import { createWalletClient, custom } from "viem";
import { celo } from "viem/chains";
const walletClient = createWalletClient({
chain: celo,
transport: custom(window.ethereum),
});
Use thirdweb SDK for wallet connection and React components
ConnectButton supports 500+ wallets including MiniPay
Built-in support for Celo chains
import { ConnectButton } from "thirdweb/react";
import { celo } from "thirdweb/chains";
<ConnectButton client={client} chain={celo} />
Celo's killer feature: pay gas fees in ERC-20 tokens without paymasters or relayers.
Use adapter addresses for 6-decimal tokens (USDC, USDT) - adapters normalize decimals
Use token addresses directly for 18-decimal tokens (USDm, EURm, REALm) - no adapter needed
Requires viem (ethers.js/web3.js don't support feeCurrency)
Only works with Celo-native wallets (MiniPay) or custom implementations
import { serializeTransaction } from "viem/celo";
import { parseGwei, parseEther } from "viem";
// For 6-decimal tokens (USDC, USDT): use ADAPTER address
const USDC_ADAPTER = "0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B";
// For 18-decimal tokens (USDm, EURm): use TOKEN address directly
const USDM_TOKEN = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
const serialized = serializeTransaction({
chainId: 42220,
gas: 21001n,
feeCurrency: USDC_ADAPTER, // or USDM_TOKEN for USDm
maxFeePerGas: parseGwei("20"),
maxPriorityFeePerGas: parseGwei("2"),
nonce: 69,
to: "0x1234512345123451234512345123451234512345",
value: parseEther("0.01"),
});
Use Foundry (forge, cast, anvil) for all contract development
Fast compilation, powerful testing, built-in fuzzing
Native Celo verification support via Celoscan API
# Install Foundry
curl -L https://foundry.paradigm.xyz | bash && foundryup
# Create project
forge init my-project && cd my-project
# Deploy to Celo Sepolia
forge script script/Deploy.s.sol \
--rpc-url https://forno.celo-sepolia.celo-testnet.org \
--broadcast --verify
Detect MiniPay via window.ethereum?.isMiniPay
Users have stablecoins (USDm, USDC), not CELO
Hide "Connect Wallet" button - connection is implicit
Test via MiniPay Site Tester with ngrok
function isMiniPay(): boolean {
return typeof window !== "undefined" &&
window.ethereum?.isMiniPay === true;
}
For AI agent development on Celo:
ERC-8004: On-chain identity, reputation, and trust verification
x402: HTTP-native micropayments with stablecoins
// Verify agent trust before interaction
const summary = await reputationRegistry.getSummary(agentId);
if (summary.averageScore >= 80) {
// Make paid request to trusted agent
const response = await fetchWithPayment(serviceUrl);
}
| Layer | Tools |
|-------|-------|
| UI/wallet/hooks | viem + thirdweb |
| Scripts/backend | viem directly |
| Smart contracts | Foundry (forge) |
| MiniPay apps | MiniPay detection + stablecoin UX |
| AI agents | ERC-8004 + x402 |
| Scenario | Approach |
|----------|----------|
| User has MiniPay | Offer fee currency selection |
| User has MetaMask | Must pay in CELO (no fee abstraction) |
| Server-side/scripts | Always use fee currency with viem |
Always be explicit about:
Network: Mainnet (42220) vs Sepolia (11142220)
Fee currency: Adapter address (6-decimal) vs token address (18-decimal)
Wallet compatibility: MiniPay supports fee abstraction, MetaMask does not
Test both CELO and fee currency transactions separately
Test wallet connection with MiniPay detection
For contracts, use forge test with fuzzing
For MiniPay apps, test in Site Tester on real device
When implementing changes, provide:
Exact files changed
Commands to install/build/test/deploy
Fee currency addresses used (mainnet vs testnet)
Wallet compatibility notes
| Network | Chain ID | RPC Endpoint | Explorer |
|---------|----------|--------------|----------|
| Mainnet | 42220 | https://forno.celo.org | https://celoscan.io |
| Sepolia | 11142220 | https://forno.celo-sepolia.celo-testnet.org | https://sepolia.celoscan.io |
Why adapters? Celo's gas calculations use 18 decimals internally. Tokens with different decimals (like USDC/USDT with 6 decimals) need adapter contracts to normalize the decimal conversion. Native Mento stablecoins (USDm, EURm, REALm) are already 18 decimals, so you use their token address directly.
| Token | Decimals | feeCurrency Address | Type |
|-------|----------|---------------------|------|
| USDC | 6 | 0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B | Adapter |
| USDT | 6 | 0x0e2a3e05bc9a16f5292a6170456a710cb89c6f72 | Adapter |
| USDm | 18 | 0x765DE816845861e75A25fCA122bb6898B8B1282a | Token (no adapter needed) |
| EURm | 18 | 0xD8763CBa276a3738E6DE85b4b3bF5FDed6D6cA73 | Token (no adapter needed) |
| REALm | 18 | 0xe8537a3d056DA446677B9E9d6c5dB704EaAb4787 | Token (no adapter needed) |
| Token | Decimals | feeCurrency Address | Type |
|-------|----------|---------------------|------|
| USDC | 6 | 0x4822e58de6f5e485eF90df51C41CE01721331dC0 | Adapter |
| USDm | 18 | 0xdE9e4C3ce781b4bA68120d6261cbad65ce0aB00b | Token (no adapter needed) |
| EURm | 18 | 0xA99dC247d6b7B2E3ab48a1fEE101b83cD6aCd82a | Token (no adapter needed) |
| Contract | Address |
|----------|---------|
| CELO Token | 0x471EcE3750Da237f93B8E339c536989b8978a438 |
| FeeCurrencyDirectory | 0x15F344b9E6c3Cb6F0376A36A64928b13F62C6276 |
| Registry | 0x000000000000000000000000000000000000ce10 |
| Token | Address | Decimals |
|-------|---------|----------|
| USDm | 0x765DE816845861e75A25fCA122bb6898B8B1282a | 18 |
| EURm | 0xD8763CBa276a3738E6DE85b4b3bF5FDed6D6cA73 | 18 |
| USDC | 0xcebA9300f2b948710d2653dD7B07f33A8B32118C | 6 |
| USDT | 0x48065fbbe25f71c9282ddf5e1cd6d6a887483d5e | 6 |
Detailed documentation for each topic is available in the celo-org/agent-skills repository:
viem - TypeScript client with fee currency support
wagmi - React hooks for Celo dApps
thirdweb - Full-stack Web3 development
evm-wallet-integration - Wallet connection patterns
fee-abstraction - Pay gas with stablecoins
minipay-integration - MiniPay Mini App development
celo-stablecoins - USDT, USDC, USDm, EURm, BRLm, XOFm, KESm, PHPm, COPm, NGNm, GHSm, GBPm, ZARm, CADm, AUDm, CHFm, JPYm, BRLA, VCHF, VEUR, VGBP, USDGLO, agEURA + COPM
celo-rpc - Blockchain interaction via RPC
evm-foundry - Foundry development (recommended)
contract-verification - Celoscan, Blockscout, Sourcify
Token Contracts - All token addresses
Core Contracts - Protocol contract addresses
Fee Currency - Fee abstraction guide
MiniPay - Mini App development
Fee abstraction: Pay gas in stablecoins without paymasters
Sub-second finality: ~1 second block times
Low fees: Gas costs under $0.001
Mobile-first: MiniPay with 12.6M activations
AI-native: ERC-8004 trust + x402 payments built for agents
Stablecoin ecosystem: Native USDT, USDC, USDm, EURm, BRLm, XOFm, KESm, PHPm, COPm, NGNm, GHSm, GBPm, ZARm, CADm, AUDm, CHFm, JPYm, BRLA, VCHF, VEUR, VGBP, USDGLO, agEURA + COPM