ZKcash: Private face-based crypto payments with liveness checks and no wallet required.
ZKcash is a privacy-preserving payment app that lets users send funds to someone using only a photo of the recipient. The sender locks funds on-chain to a facial commitment, and the recipient unlocks them by scanning their own face on their phone. No wallet is required for the recipient at onboarding. ZKcash adds liveness checks to prevent spoofing with photos, videos, or deepfakes, and generates a zero-knowledge proof that the recipient’s live face matches the sender’s reference image. The proof verifies the match privately, so no centralized server ever stores both images, and no biometric data is publicly revealed.
ZKcash combines a web frontend, ZKML pipeline, and on-chain verification. The frontend is built with Vite and TypeScript, using TensorFlow.js/MediaPipe for face processing and a liveness flow (blink/head-motion checks). We use Rarimo’s Bionetta ZKML stack to generate facial embeddings and compile the verification logic into a zk circuit (Circom + Groth16). The recipient’s device creates a proof that their live scan matches the sender’s committed embedding above a configured threshold, without revealing either embedding or source images. Solidity contracts verify proofs on-chain and release locked funds, with nonce-based replay protection and refund logic. Funds are routed to a stealth-style destination flow so recipients can claim securely even without preconfigured wallet onboarding.

