Milestone 1 Completion Report
Project: Pocket Node: Mobile CKB Light Client Wallet for Android
Repository: github.com/RaheemJnr/pocket-node
Milestone: M1 — Mainnet Ready & Hardware-Backed Security
Releases: v1.1.0, v1.2.0, v1.2.1, v1.2.2
Deliverables Summary
All six accepted deliverables for M1 have been completed:
| # | Deliverable | Status |
|---|---|---|
| 1 | Production mainnet configuration with cell dependencies and bootnode settings | Done |
| 2 | BIP39 mnemonic generation with TEE/StrongBox encryption | Done |
| 3 | Biometric authentication (fingerprint/face) with PIN fallback | Done |
| 4 | Comprehensive mainnet testing with real transactions | Done |
| 5 | Open-source repository on GitHub | Done |
| 6 | Releases: v1.1.0 (Week 2), v1.2.0 (Week 4) | Done |
Feature 1: BIP39 Mnemonic with TEE/StrongBox Encryption
Pocket Node now generates wallets using BIP39 12-word mnemonic seed phrases with CKB’s standard derivation path (m/44'/309'/0'/0/0). The mnemonic and derived private key are encrypted using Android’s Trusted Execution Environment (TEE) or StrongBox hardware security module where available.
What was built:
MnemonicManager— BIP39 mnemonic generation, validation, and BIP32/BIP44 key derivation using thekotlin-bip39libraryMnemonicBackupScreen— 3-step backup flow: display 12 words in a numbered grid (withFLAG_SECUREto prevent screenshots), verify 3 randomly selected words, and success confirmationMnemonicImportScreen— Recovery flow with word autocomplete from the BIP39 word list and real-time validationKeyManagerupgraded — Mnemonic-aware wallet creation, TEE/StrongBox-backedMasterKeyencryption, and support for both mnemonic and raw key wallet types
PRs: #11, #12, #13
Feature 2: Biometric Authentication with PIN Fallback
The app now requires authentication before showing wallet contents. Users authenticate via fingerprint, face recognition, or a 6-digit PIN on devices without biometric hardware.
What was built:
AuthManager— Detects biometric hardware availability and enrollment status usingBiometricManagerPinManager— PIN hashing with Blake2b + per-device salt, 5-attempt lockout with 30-second cooldownAuthScreen— Automatically triggersBiometricPrompton launch with manual retry and PIN fallbackPinEntryScreen— 6-digit PIN pad with dot indicators, shake animation on wrong entry, lockout timer displaySecuritySettingsScreen— Toggle biometric auth, set/change PIN, view security status- PIN re-verification required before changing security settings
PRs: #15, #16, #21
Feature 3: Mainnet Production Hardening
The wallet has been hardened for real CKB mainnet transactions with proper validation, error handling, and release configuration.
What was built:
NetworkValidator— Validates address-network consistency (rejectsckttestnet addresses on mainnet and vice versa)- Testnet support with network switching — users can toggle between mainnet and testnet, each with isolated data directories and configurations
- Release signing and R8 minification configured
- ProGuard rules for CKB SDK, BouncyCastle, secp256k1, and Room entities
- Debug logging gated behind
BuildConfig.DEBUG AndroidManifesthardened: backup disabled, native library extraction enabled- 15 globally distributed bootnodes configured for both mainnet and testnet
PRs: #19, #22
Feature 4: Open Source & CI/CD
The repository is public on GitHub with automated CI/CD and community contribution infrastructure.
What was built:
- GitHub Actions CI workflow — builds JNI library + Android app, runs unit tests on every PR
- Release workflow — automated APK builds on version tags
CONTRIBUTING.md,SECURITY.md, issue templates, PR template- Google Play Store listing content prepared
- UI/UX redesign to Material 3 standards with the Nervos team’s feedback incorporated
PRs: #20, #25, #42, #43, #44
Additional Work (Beyond Spec)
Several improvements were shipped beyond the original M1 scope:
- Room database caching (Phase 1 & 2) : Transaction history and balance caching with
transactions,balance_cache,header_cache, anddao_cellstables for offline-first performance (#49, #50) - CKB/USD price feed : Live CKB price from CoinGecko displayed on the home screen
- Test coverage expansion : 232 unit tests covering JNI models, Extensions utilities, TransactionBuilder, TransactionRecord, DAO models, and more (#47, #52)
- Sync mode selector after import : Users choose their sync depth (Recent, Full History, Custom) when importing a wallet (#41)
- Website : Landing page for the project at the repo’s GitHub Pages
Releases
| Version | Highlights | |
|---|---|---|
| v1.1.0 | BIP39 mnemonic, biometric/PIN auth, mainnet hardening, testnet support, CI/CD | |
| v1.2.0 | Room database cache, DAO sync pipeline, UI/UX redesign | |
| v1.2.1 | Test coverage (67 new tests), website fixes | |
| v1.2.2 | Copy private key in backup, balance visibility toggle |
All releases include signed APKs attached as assets.
What’s Next: M2 — Nervos DAO Protocol Integration
Work on Milestone 2 is already underway on the feature/m2-nervos-dao branch. M2 will add full Nervos DAO support including:
- DAO deposit and withdrawal transactions
- Compensation tracking and cycle visualization
- DAO direction detection in transaction history
- In-app update notifications from GitHub releases
Latest Release: Release v1.2.2 · RaheemJnr/pocket-node · GitHub