Welcome to identiPay
identiPay is a privacy-preserving payment protocol that combines zero-knowledge proofs, stealth addresses, and blockchain technology to enable anonymous commerce with verifiable identity. This guide will walk you through setting up your wallet and making your first transaction.Prerequisites: You’ll need an Android device with NFC capability and a biometric passport (ePassport) to complete identity registration.
Installation
Download the Wallet App
Install the identiPay Wallet from the Google Play Store or build from source:The wallet app is built with Kotlin and Jetpack Compose, with native cryptography for stealth addresses and zero-knowledge proofs.
Create Your Identity
On first launch, you’ll be guided through the identity registration process:The wallet derives your keypairs from your passport + PIN:Two keypairs are generated:
- Scan your passport - Place your biometric passport on the device’s NFC reader
- Enter your PIN - This is combined with your passport data to derive a deterministic seed
- Choose your username - Register a unique
@username.idpaymeta-address
Your identity commitment is computed as
Poseidon(issuerCertHash, docNumberHash, dobHash, userSalt) and registered on-chain via a zero-knowledge proof. The proof verifies you have valid credentials without revealing any personal information.- Spend key - Controls your funds
- View key - Scans for incoming payments
Get Testnet USDC
identiPay currently operates on Sui testnet. You’ll need testnet USDC to make payments:
- Copy your receive address from the wallet home screen
- Visit the Sui testnet faucet
- Request testnet SUI
- Swap for testnet USDC on a testnet DEX
Your First Transaction
Find a Merchant
Try the demo checkout at The merchant creates a payment proposal via the backend API:You’ll receive a QR code containing the transaction ID.
https://checkout.idpay.dev or use the POS app:Scan the QR Code
Open the identiPay wallet and tap Scan to Pay. The wallet:
- Fetches the proposal from the intent endpoint
- Verifies the merchant’s signature
- Shows you the transaction details
Review and Confirm
The wallet displays:
- Merchant name and DID
- Amount in USDC
- Age gate requirements (if any)
- Encrypted receipt preview
Execute Settlement
When you tap Confirm, the wallet:The settlement contract ensures atomicity - either everything succeeds or everything fails:
- Derives a fresh stealth address for receiving the receipt
- Signs the intent hash with your spend key
- Builds a Programmable Transaction Block (PTB)
- Submits to the Sui blockchain
Advanced: Shielded Pool for Privacy
If you need to merge coins from multiple stealth addresses, the wallet automatically uses the shielded pool:Backend API Reference
The identiPay backend exposes these key endpoints:Announcements
GET /api/identipay/v1/announcements - Query stealth address announcements with optional view tag filteringIntents
GET /api/identipay/v1/intents/{txId} - Resolve a payment proposal by transaction IDNames
GET /api/identipay/v1/names/{name} - Resolve a meta-address to public keysMerchants
POST /api/identipay/v1/merchants/register - Register a new merchant DIDWebSocket Status Updates
Subscribe to real-time settlement status:SettlementEvent emissions and pushes updates to connected clients.
Next Steps
Architecture Overview
Understand the full system design - contracts, circuits, and mobile apps
Smart Contracts
Dive into the Sui Move contracts powering settlements
ZK Circuits
Learn how zero-knowledge proofs preserve privacy
Backend API
Full API reference for integrating with identiPay
