SafePay ZK — Testnet Progress Update
SafePay ZK is a Nimiq Pay Mini App concept focused on one simple idea:
Verify before you pay.
The current version is now working as a testnet prototype using a blockchain-only flow.
SafePay ZK runs inside Nimiq Pay as a Mini App. You can open Nimiq Pay, add/search a Mini App by URL, and use:
What works today:
Request Payment flow:
A business connects with Nimiq Pay, creates a SafePay payment request, adds order details, generates a QR code, and waits for payment.
Verify Payment flow:
A user scans the QR code, reviews the payment request, verifies it, and pays through Nimiq Pay on testnet.
Payment confirmation:
The payment is sent through Nimiq Pay with SafePay data attached to the transaction. Business can detect the payment on-chain and show the order as Paid. If the order expires without payment, it can be marked as Expired.
Current architecture:
SafePay ZK currently uses a testnet + blockchain-only approach. There is no backend yet. The app checks the Nimiq testnet while Business is open and updates order status based on what it finds on-chain.
Current status:
  • Create payment requests
  • Generate QR codes
  • Scan SafePay requests
  • Review order details before payment
  • Verify before enabling payment
  • Pay through Nimiq Pay on testnet
  • Attach SafePay intent data to the payment transaction
  • Detect Paid / Expired status from the blockchain
  • Show receipts in Business and Personal flows
Why this matters:
SafePay ZK is not trying to replace Nimiq Pay. Nimiq Pay still handles the wallet, user confirmation, and transaction. SafePay adds a verification layer before payment, helping users confirm that the request they are about to pay matches the intended recipient, amount, network, and order data.
Roadmap:
Phase 1 — Competition prototype polish
Keep the app stable on testnet, polish the Request Payment and Verify Payment flows, improve receipts, add anti-self-payment checks, and clearly present the app as a working testnet prototype.
Phase 2 — Real ZK verification
Connect the ZK proof to each real payment request, remove the fixed demo proof, generate a unique intentHash per order, and verify the proof before enabling PAY.
Phase 3 — Mainnet preparation
Add strict mainnet validation, separate testnet/mainnet storage, prevent network mixing, block self-payments, and test with very small real payments.
Phase 4 — Backend or indexer
Add a backend or indexer so Business order status can update even when the Business device is closed. This would allow stronger Paid / Expired tracking without depending only on the open app.
Phase 5 — Production hardening
Review the ZK circuit, audit the payment flow, improve error handling, add privacy documentation, improve receipts, and prepare the app for real-world usage.
SafePay ZK is still a prototype, but the core flow is now working:
Business creates a request.
Users verifies before paying.
Nimiq Pay sends the transaction.
SafePay reads the blockchain and updates the order status.
Verify before you pay.
2
1 comment
Camilo Tenorio
3
SafePay ZK — Testnet Progress Update
Mini Apps Competition
skool.com/miniappscompetition
🏆Official community for the Nimiq Mini Apps Competition
📱Build, connect & compete for $50k+ in prizes
🌍For developers, indie hackers & vibe coders
Leaderboard (30-day)
Powered by