A secure, device-bound, offline-capable digital cash system built for RBI Harbinger.
RupayGo enables offline person-to-person payments using secure hardware-bound tokens, QR-based exchange, and seamless online reconciliation with a backend issuer bank.
This project demonstrates how CBDC can work without internet, while preventing double spending and maintaining strong security guarantees.
- Offline Token Transfers
Send and receive CBDC tokens without internet
QR-based handshake to transfer ownership
Sender → Receiver transfer is atomic and secure
- Hardware-Backed Security
Tokens stored in EncryptedSharedPreferences
Device-bound cryptographic keys (AES-GCM)
Prevents tampering and cloning
- Double-Spending Protection
Sender’s token removed immediately after transfer
Distributed ledger on client + reconciliation on server
- Online Sync & Settlement
When internet restores, app syncs pending transactions
Backend updates real bank balance securely
Uses digital signatures and server validation
- Multi-hop Token Transfers
A received token can be used again offline
Fully chainable just like real currency
1️⃣ Sender initiates transfer
Opens wallet → chooses token → QR created
Contains token ID + signature + metadata
2️⃣ Receiver scans sender QR
Verifies authenticity
Accepts token temporarily
3️⃣ Receiver shows confirmation QR
Sender scans → token removed from sender
Ownership shifts to receiver
No internet required.
📱 Client (Android App)
Kotlin
Jetpack Compose / UI
EncryptedSharedPreferences
QR Code (ZXing)
Coroutines & Flow
Token storage with reactive balance
🖥 Backend (Node.js Server)
Firebase Cloud Firestore(Backend)
Crypto for signature validation
Token issuance + reconciliation
Dynamic account updates