AFIKA is a non-custodial mobile wallet: a Go EOA core (via gomobile), an Expo app, and a lightweight backend API that caches balances, transactions, and FX rates.
core/: Go wallet core + backend API (core/cmd/api) + CLIapp/: Expo app + native bridge module (modules/pocket-module) forWalletCoredocs/: technical docs, implementation notes, and task listsdoc/: product, business, and marketing notes
On-device (Go core via gomobile):
- Generates and stores a single EOA per user in SQLCipher.
- Secure init path (
initWalletSecure) pulls key material from Keychain/Keystore. - ETH + USDC balances, sends, and transaction history.
- Watch list for inbound monitoring and encrypted backup export/import.
Backend (optional, non-custodial):
- Caches balances, transactions, and FX rates for faster UI and analytics.
- No user private keys; does not sign transactions.
- See
docs/backend.mdfor endpoints and worker behavior.
App:
- Default network is
ethereum-sepoliain development andethereum-mainnetin production. - Registers the active network + USDC token at startup.
- Uses biometrics/PIN gating for sends.
- App default network:
ethereum-sepolia(dev) /ethereum-mainnet(prod). - Default token scope in app:
nativeandusdc.
The Expo bridge exposes the WalletCore facade. For the full method list see:
app/modules/pocket-module/README.md
Key capabilities include:
- wallet lifecycle + secure init
- network/token registration
- balances, transfers, and transaction history
- watched addresses and backup export/import
cd contract
npx hardhat testcd core
go test ./...cd app
npm run lint
npx tsc --noEmit- Backend API:
docs/backend.md - Working notes:
docs/notes.md - Active task list:
docs/tasks.md - Core internals:
core/README.md
