> ## Documentation Index
> Fetch the complete documentation index at: https://a-identity.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Build on Celo

> Celo network config for mainnet and Celo Sepolia, the ERC-8004 registries live there, and the first-party x402 facilitator that settles in USDC.

Celo is a stablecoin-native EVM L2 where gas can be paid in a stablecoin via CIP-64, and
where a first-party x402 facilitator already exists. A-Identity runs agent identity there
and sells its trust tools over that facilitator, settled in native USDC.

## Why Celo

> **A facilitator already exists**
>
> Celo runs its own x402 facilitator, so a buyer signs an EIP-3009 authorization and pays no gas. We did not have to build the rail.

> **Native Circle USDC**
>
> Real USDC, not a bridged twin, with an EIP-712 domain we read off the contract before signing anything.

> **Gas in stablecoins**
>
> CIP-64 fee abstraction lets a transaction pay its own fee in USDC, which removes the "hold a second token" problem for an agent.

> [!NOTE]
>
> Celo mainnet is **live**: agent #9759 is ours on the canonical registry, and the x402
> rail has real settlements recorded in a durable log you can read at
> [/celo-proof](https://a-identity.xyz/celo-proof). Every one of them so far was paid by
> our own buyer wallet, on 2026-08-09, and is labeled internal. The registration, two
> settlement receipts and the caveats are at [/proof/celo](https://a-identity.xyz/proof/celo).
> Celo Sepolia is **beta**.

## Network config

| Field | Mainnet | Celo Sepolia |
| - | - | - |
| Chain ID | `42220` | `11142220` |
| CAIP-2 | `eip155:42220` | `eip155:11142220` |
| Native currency | CELO (18 decimals) | CELO (18 decimals) |
| RPC (HTTP) | `https://forno.celo.org` | `https://forno.celo-sepolia.celo-testnet.org` |
| Block explorer | [celoscan.io](https://celoscan.io) | [celo-sepolia.blockscout.com](https://celo-sepolia.blockscout.com) |
| USDC | `0xcebA9300f2b948710d2653dD7B07f33A8B32118C` | `0x01C5C0122039549AD1493B8220cABEdD739BC44E` |
| Faucet | n/a | [faucet.celo.org/celo-sepolia](https://faucet.celo.org/celo-sepolia) |

> [!WARNING]
>
> Alfajores is deprecated; **Celo Sepolia** is the current testnet. Also note there is no
> ValidationRegistry in the Celo ERC-8004 family on either network, so a KYA result
> cannot be anchored on-chain here. We verify and record it off-chain and say so, rather
> than reporting an anchor count of zero that would read like a real measurement.

## Connect with viem

```ts chain.ts theme={null}
import { celo, celoSepolia } from 'viem/chains'
import { createPublicClient, http } from 'viem'

// viem ships both, including the CIP-64 serializers, so fee abstraction works.
export const client = createPublicClient({ chain: celo, transport: http('https://forno.celo.org') })
export const testnet = createPublicClient({ chain: celoSepolia, transport: http() })
```

```ts read.ts theme={null}
import { client } from './chain'

const owner = await client.readContract({
  address: '0x8004A169FB4a3325136EB29fA0ceB6D2e539a432',
  abi: [{ type: 'function', name: 'ownerOf', stateMutability: 'view', inputs: [{ type: 'uint256' }], outputs: [{ type: 'address' }] }],
  functionName: 'ownerOf',
  args: [9759n],
})
```

## What is deployed

| Contract | Network | Address |
| - | - | - |
| IdentityRegistry | mainnet | [`0x8004A169FB4a3325136EB29fA0ceB6D2e539a432`](https://celoscan.io/address/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432) |
| ReputationRegistry | mainnet | [`0x8004BAa17C55a88189AE136b182e5fdA19dE9b63`](https://celoscan.io/address/0x8004BAa17C55a88189AE136b182e5fdA19dE9b63) |
| IdentityRegistry | Celo Sepolia | [`0x8004A818BFB912233c491871b3d84c89A494BD9e`](https://celo-sepolia.blockscout.com/address/0x8004A818BFB912233c491871b3d84c89A494BD9e) |
| ReputationRegistry | Celo Sepolia | [`0x8004B663056A597Dffe9eCcC1965A193B7388713`](https://celo-sepolia.blockscout.com/address/0x8004B663056A597Dffe9eCcC1965A193B7388713) |

The mainnet identity registry is the same address Arc Mainnet, Base, Arbitrum One, X Layer
and Robinhood Chain carry, and
the Celo Sepolia pair matches Arc's. That is the point of a deterministic deployment: one
agent id means the same thing wherever you resolve it.

## Verify it yourself

```bash theme={null}
# The settlement log for this rail, honest zeros included.
curl -s https://a-identity-backend.onrender.com/api/celo/proof

# What the rail is actually configured with, including the facilitator it calls.
curl -s https://a-identity-backend.onrender.com/api/celo/status
```

## Where Celo fits

Celo is the rail that proved the product works against someone else's facilitator, which
is what made it obvious what to do on a chain that has none. See
[Robinhood Chain](/chains/robinhood), where we built the facilitator ourselves.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.