Onchain Agents Hackathon: Build for Real-World Payments & Everyday Applications. Agents for a real economy, not a casino.
AjoAI turns Africa's most common informal savings institution, the rotating savings circle (ajo / esusu in Nigeria, chama in Kenya, stokvel in South Africa), into an autonomous on-chain agent inside MiniPay. Members join in MiniPay, save in local Mento stablecoins, and the agent runs the whole circle: collecting contributions, executing the payout rotation, parking idle funds, enforcing defaults, and turning a completed circle into a portable savings-credit score.
▶ Demo video · Live app · On-chain dashboard · Agent on 8004scan — agentId 9339 · Mainnet circle
A rotating savings circle: a group each contributes a fixed amount every period, and each period one member receives the whole pot, until everyone has received exactly once. AjoAI makes each circle an autonomous agent that:
- Onboards members inside MiniPay (wallet-based, one wallet = one slot; the join path carries a Self proof-of-personhood slot, live gating on the roadmap).
- Custodies + collects fixed contributions in a local stablecoin.
- Executes the payout rotation automatically, no human in the loop.
- Parks idle pot funds in yield between payouts.
- Enforces defaults via security deposits + on-chain penalties + ERC-8004 reputation.
- Issues each member a portable savings-credit score.
- Answers questions in English, Nigerian Pidgin, and Swahili.
Safety model (enforced, not promised): the contract holds the money and enforces every rule; the agent only triggers legal transitions and can never drain a circle or pay an arbitrary address; the LLM never moves funds, it only explains chain state.
All contracts source-verified on Celoscan (Sourcify exact_match).
| Contract | Role | Address |
|---|---|---|
| CircleFactory | spawns circles, bakes in the agent | 0xE2401Ab2…2186 |
| ReputationLedger | ERC-8004 savings-credit signals | 0xd2f340Fe…Ed04 |
| YieldAdapter (simulated, loud) | idle-fund parking interface | 0xF9293905…014d |
| Circle | the escrow that holds the pot + enforces every rule | one deployed per circle by the factory — e.g. 0x4D03…E11F |
The first three are fixed singletons; Circle is the core money contract — the factory deploys a
fresh, source-verified instance on every createCircle (the address above is the completed real-USD₮
proof circle). So the on-chain footprint is four contract types, with a new Circle per savings group.
ERC-8004 agent identity: registered as agentId 9339 on the mainnet Identity Registry
(0x8004A169…), 8004scan (track #3, Celo mainnet rank).
A 3-member circle in real Tether USD₮ (6 decimals): the agent triggered all 3 payouts and
finalize. Circle 0x4D03…E11F
finished Completed, roundsPaid = 3, reconcile in == out == 3.6 USD₮ (no wei created or
destroyed, real money). Members scored 8 each; the seed funds were fully recovered (only CELO gas spent).
| Round | Autonomous payout tx |
|---|---|
| 0 | 9924e896… |
| 1 | b1cbabf8… |
| 2 | 4b75411f… |
| finalize | 2ca4f1a4… |
The agent runs as an always-on Railway worker (run-all 30) sweeping the mainnet factory every 30s.
Testnet: the same contracts were also validated end-to-end on Celo Sepolia during development (a full 4-member rotation, agentId 307). Mainnet above is the canonical, real-money deployment — all proof and addresses here are mainnet.
- Mento local stablecoins, USDm (Mento Dollar) and NGNm (Mento Naira); save in your own currency. (Mento rebranded cUSD→USDm, cNGN→NGNm.)
- MiniPay, in-wallet onboarding + distribution to 15M+ wallets.
- CIP-64 fee abstraction, pay gas in stablecoins, no CELO needed.
- Self, ZK proof-of-personhood: the contract enforces one slot per human and the join path carries a Self-proof argument; the verifier runs open-mode today, live gating is on the roadmap.
- ERC-8004, portable agent identity + savings reputation (Identity + Reputation).
- x402, premium endpoints (guarantor score, analytics) for other agents (planned).
| Pillar | In AjoAI |
|---|---|
| Economic agency | Agent autonomously triggers payouts, idle-fund parking, penalty/default recovery, no human per cycle |
| On-chain integration | Custom escrow/rotation contracts, ERC-8004 identity + reputation writes, fee-abstracted txs, every action → a tx hash |
| Real-world applicability | Digitizes the most common informal savings institution in Africa |
| Creative use of Celo infra | Mento local stables (USDm/NGNm), MiniPay in-wallet onboarding, Self-ready join path, CIP-64 gas-in-stablecoin |
| Path | What |
|---|---|
/contracts |
Solidity (Foundry), Circle, CircleFactory, adapters; 25 tests (worked example, adversarial, invariants) |
/agent |
Python runtime (perceive→reason→act→settle), NL handler, ERC-8004 registration; 18 tests |
/miniapp |
MiniPay Mini App (viem/wagmi): create / join / pay / activity / score / Ask, plus a read-only MCP server (/api/mcp) so other agents can query AjoAI |
/config |
Per-chain addresses + ABIs + agent card |
# Contracts
cd contracts && forge test -vvv
# Agent
cd agent && python -m venv .venv
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m pytest tests/ -q
.venv/Scripts/python -m src.main status # perceive the live circleConfig + secrets: copy env.example → .env. Addresses are read from
config/addresses.<chain>.json; never hardcoded.
- Contracts: Solidity 0.8.28 + Foundry + OpenZeppelin v5.
- Agent: Python (web3.py), perceive→reason→act→settle; APScheduler; structlog.
- LLM (NL handler only, never moves money): DeepSeek (
deepseek-chat, OpenAI-compatible), with a deterministic chain-derived fallback when no key is set — so a hallucination can never authorize a transfer. - Frontend: Next.js (App Router) + viem/wagmi, MiniPay-native (CIP-64 gas in USDm).
- Agent interop: a read-only MCP server (
miniapp/app/api/mcp) + an ERC-8004 agent card at/.well-known/agent-card.json.
Note: the build agent (Claude Code, Opus 4.8) wrote the code; the runtime NL model is DeepSeek.
See STATUS.md for the current deployment state, test coverage, and remaining work.
MIT. See LICENSE.