個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A dollar wallet and shop till on Monad: passkey wallets, gasless AUSD payments in about a second (EIP-3009), private sends (ERC-5564), and an on-chain limit for every card, person and AI agent.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗You live in London. Your grandmother lives in a village back home. She has a basic phone, no smartphone and no data. Sending her $50 today means agent fees, slow transfers, and a currency that loses value while it waits.
Stablecoins fixed the money, but not the experience. They still ask for an app, internet, a gas token, a seed phrase and a long address. Hundreds of millions of people have a phone but no internet, and most people never get past the seed phrase.
With Kova, you send dollars to her phone number. She gets a text. She dials a short code, enters her PIN, and checks or spends her dollars, with no app and no internet. You set her up once from your Kova app: her number, a PIN, a daily limit, and a code Kova texts to her phone.
We believe that if you solve a real problem, people use the product. This is the one we chose.
#), and an unclaimed link can be taken back. your Kova wallet ──signs──▶ Kova API ──relayer pays gas──▶ Monad: AUSD lands in her pocket
│
her phone ◀── text: "$1.00 arrived. Balance $9.25. Dial *384*53916#" (Africa's Talking SMS)
her phone ──dials *384*53916#──▶ Africa's Talking ──▶ Kova API: balance, pay a till, send
ussd.ts, pockets.ts,
phone-payments.ts,
arrival-sms.ts.Today this runs on Africa's Talking's simulator with test dollars. Next: a live USSD code per country, and cashing out to mobile money (M-Pesa, MTN MoMo) from the same menu.
transferWithAuthorization for AUSD.
Kova's relayer submits it and pays the gas, so nobody holds MON.eth_sendRawTransactionSync, so the receipt comes back with the send: about 0.4 to 0.5 s on
the server, about a second from tap to paid on a phone in Lagos.KovaCard holds each spending key's daily limit, freeze and cosigner,
so the limit is kept by the contract, not by Kova's database.ada.nad comes from Nad Name Service on Monad mainnet. A pasted address
shows its own .nad name only when that name points back to it.stealth.ts), each posted to the standard announcer so any
wallet can find its payments from the chain alone. The sender's memo is sealed for the
recipient's viewing key. The amount is public; who it went to isn't.apps/rates) checks two FX
sources against each other, reaches consensus and writes a signed report to KovaRates on Monad
testnet. Mainnet uses a fixed reference table, labelled as such.mykova.app/stats counts Kova's users live, straight from Kova's database on each network, and refreshes every minute. It shows people, payments, money moved, shops, links and where new people came from. It counts totals only, never who someone is.
On 23 October 2026:
| Mainnet | Testnet | |
|---|---|---|
| People with a Kova wallet | 12 | 162 |
| Payments | 0 | 36 ($402.55 in test dollars) |
| Shops open | 2 | 21 |
| Links sent | 1 | 7 (4 claimed) |
These counts include our own testing, and the page says so. A person is a wallet that did
something only Kova wallets do: made its passkey backup, published a note key, took test dollars,
paid a Kova charge, sent or claimed a link, or opened a shop. Kova's demo account, which App Review
signs into, is left out. The numbers come from apps/api/src/routes/stats.ts,
and anyone can read them at GET /v1/public/stats on each network's API.
Kova's API, relayer and contracts are live on mainnet. This week mykova.app runs the testnet build, with free test dollars, for the phone-payment demo.
| What | Link |
|---|---|
| AUSD (Agora), the dollar every payment moves | 0x00000000eFE3…9012a |
| Kova's relayer, which pays everyone's gas | 0x67d18542…7fa967 |
| KovaCard, the contract behind every spending key | 0x9bee9F2D…Ef325E |
| KovaSplits, which shares out each shop's sales as they land (every shop gets its own splitter) | 0x5a5A8f84…1E6b3a |
| KovaRepeat, repeat payments: collected only when due, stopped by the payer at any time | 0x97C8720b…9f4370 |
| ERC-5564 announcer and ERC-6538 registry | 0x55649E01…5564, 0x6538E6bf…6538 |
| Gas-free $1.00 transfers through Kova's relayer | 0x98b3d548…, 0x370e22dd…, 0xd7e2300f… |
| Feature | Receipt |
|---|---|
| $3.00 to a phone number with no apps, straight into its USSD pocket | 0xe7957e6d… |
| $1.00 more to the same phone, arrived in 1.37 s | 0xa77fb146… |
| A coffee, $4.50, with a $0.00 fee | 0x6a52a3cf… |
| $20 to a friend abroad, arriving as ≈ €18.40 | 0xa92a1733… |
| $20 sent by link and claimed by a brand-new wallet in 0.7 s | 0x7feaee54… |
| Paid with no signal, carried as a code, settled in 0.66 s | 0x84a1ffae… |
| Ordered and paid from table 3, $7.75 in 0.76 s | 0x61749899… |
| The sixth croissant, free with the stamp card: a $0.00 payment with its receipt | 0x73001c6d… |
| A private send's announcement, with its sealed memo |
| What | Link |
|---|---|
| AUSD (Agora) | 0xa9012a05…5322dC |
| Kova's relayer | 0x5868C3C3…771940 |
| KovaRates | 0xb5322DC6…C9e8e |
| A bakery sale, $6.50, at a Kova till | 0x152be347… |
| A send from the web wallet, $2.50 | 0x3306403e… |
| $1.00 with a private note, web to phone, and $0.50 back | 0xc3645812…, 0x3d43cd4d… |
| Two private payments gathered into one address, then spent | 0x240552b3…, 0xcfdc9845… |
| ERC-5564's announcer, deployed by Kova at its canonical address | 0x6438a00e… |
flowchart LR
subgraph People
app["Kova app (iOS, Expo)"]
web["mykova.app (Next.js)"]
phone["Any phone (USSD, SMS)"]
end
subgraph Kova
api["Kova API (Hono)"]
db[("Postgres")]
watcher["Chain watcher"]
relayer["Relayer (pays gas)"]
end
subgraph Monad
ausd["AUSD (EIP-3009)"]
card["KovaCard (limits)"]
rates["KovaRates"]
nns["Nad Name Service"]
end
at["Africa's Talking"]
cre["Chainlink CRE"]
app -- "signed authorization" --> api
web -- "server-side calls" --> api
phone -- "*384*53916#" --> at -- "USSD callback" --> api
api -- "texts" --> at -- "SMS" --> phone
api --- db
api --> relayer -- "transferWithAuthorization" --> ausd
relayer --> card
watcher -- "reads transfers" --> ausd
watcher --- db
cre -- "signed report" --> rates
api -- "reads" --> rates
app -- "looks up names" --> nns
web -- "looks up names" --> nns
| Path | What it is |
|---|---|
apps/mobile | The Kova app (Expo, React Native): the wallet, and shop mode with the till. Installs with npm, outside the pnpm workspace. |
apps/web | mykova.app (Next.js): the web wallet (/wallet), shop mode (/dashboard), pay pages, stall pages and request links. Every API call is made server-side. |
apps/api | The Kova API (Hono on Node): checkout, relaying, the chain watcher, wallets, phone payments, USSD pockets, texts, shops and tills. |
apps/card | KovaCard, the contract behind every spending key (daily limit, freeze, cosigner), with Foundry tests. |
apps/rates | The Chainlink CRE workflow and the KovaRates contract (Foundry). |
packages/monad | Shared chain logic: networks and tokens, EIP-3009 authorizations, stealth addresses, sealed notes, the privacy router, spending keys, offline payments, phone payments and .nad names. |
packages/db | Postgres schema and migrations (Drizzle). |
packages/tempo | From the earlier Tempo build (see below); the Monad build doesn't use it. |
Built with TypeScript · Monad · viem · AUSD by Agora · passkey wallets with Mera (WebAuthn PRF) · Hono on Node 22 · PostgreSQL with Drizzle · Next.js 16 and React 19 · Expo SDK 54 · Africa's Talking (USSD and SMS) · Privy · Relay · Nad Name Service · Chainlink CRE · Foundry · Railway · Vitest · Biome · Remotion and ElevenLabs for the films.
You need Node 22.12+, pnpm 10, PostgreSQL 16, and Xcode for the iOS app.
git clone --recursive https://github.com/Cybire1/kova && cd kova
pnpm install
API (http://localhost:4000; migrations run on start):
cp apps/api/.env.example apps/api/.env
createdb kova_dev
pnpm --filter @kova/api setup:dev # 1st run: generates a relayer key into apps/api/.env.monad
# fund that relayer with testnet MON at https://faucet.monad.xyz, then:
pnpm --filter @kova/api setup:dev # 2nd run: creates a demo shop and prints its API key
pnpm --filter @kova/api dev
Test dollars and payments need test AUSD in the relayer. Agora's testnet faucet
(0xd236c18D274E54FAccC3dd9DDA4b27965a73ee6C) gives 10,000 per address when it has funds; when
it's empty, send test AUSD to the relayer's address.
Web (http://localhost:3000):
cp apps/web/.env.example apps/web/.env.local # KOVA_API_URL=http://localhost:4000, a SESSION_SECRET
pnpm --filter @kova/web dev
iOS app:
cd apps/mobile
npm install
cp .env.example .env # EXPO_PUBLIC_KOVA_MONAD_API_URL=http://<your Mac's LAN IP>:4000 on a phone
npx expo run:ios
Tests: CI (.github/workflows/ci.yml) runs typecheck, lint, the
unit tests, the API suite against Postgres, the website build, the iOS app's typecheck and the
contract tests on every push. AGENTS.md lists the same commands to run
locally.
Deploy: the API and web app ship as Docker images (Dockerfile,
Dockerfile.web) on Railway, with the same variables as the .env.example files.
In production the relayer key belongs in a KMS.
All of Kova was written during the Metropolis build window (1 September to 13 October 2026). It
began on 19 September as a Tempo build for Colosseum's Crypto World's Fair (branch main, until
23 September): the API's foundation, the database schema, payment intents, the merchant dashboard
and the first app screens. The Monad build moved Kova to Monad and added payments by signature
with sponsored gas, the chain watcher, passkey wallets with Mera, the web wallet, the shop inside
the wallet, wallet sign-in, email and Google with Privy, Chainlink CRE rates, spending keys, private
payments, offline payments, Kova Travel and the launch film.
Since the submission (14 October on), during judging: payments to phone numbers, USSD pockets and arrival texts with Africa's Talking, sending to .nad names, private dollars in one balance, deposits from other chains through Relay, MON conversion, Google sign-in, the TestFlight beta, and CI on GitHub Actions. Every commit is dated in the history.
Kova was built with AI coding tools. Most of the code, tests and documentation, and the films' code, were written with Claude Code (Anthropic's Claude models) under the team's direction and review. The films' voiceovers were generated with ElevenLabs. At runtime, two optional features call AI models: "Snap your menu" (Claude or DeepSeek) and spending insights (TypeSafe's Jev).
Kova builds on open-source software, each under its own licence, including: viem, Mera, @noble and @scure cryptography, Hono, Drizzle ORM, Zod, Next.js, React, Expo and React Native, the Privy SDK, the Chainlink CRE SDK, Foundry, Remotion (Remotion licence), Vitest and Biome. The Manrope typeface is under the SIL Open Font License. AUSD is Agora's; exchange-rate sources are open.er-api.com and the fawazahmed0 currency API.
Kova is MIT licensed.
0x62b66ba6…| Paid straight from a one-time address | 0x969774c6… |
| Claude pays over MCP with its own key; the owner approves an ask-first payment | 0x47c9e9f5…, 0xd9c89c96… |
| A teammate spends the owner's dollars within their limit | 0xc7296af1… |
| Private payroll, each person paid at a one-time address | 0x7726357c… |
| A Chainlink CRE rate report written to KovaRates | 0x982e9045… |
| An AI agent's key switched on; a Claude Code run paying | 0xee1771f2…, 0xf7659c65… |
| A teammate's key switched on | 0x155d853c… |
| More payroll, and a supplier payment | 0x43935f81…, 0x2ab78661…, 0x94fb846d… |
| A CRE broadcast run | 0xb5f7efae… |
film| The demo videos, rendered with Remotion. |
docs | Design notes, research, and the Metropolis checklist. |