This is a lean ZKP mobile application that demonstrates the integration of several tech stacks on cryptographic (ZK, Noir), blockchain (on-chain interaction), and mobile (Flutter) infra.
šÆ Project Overview
This project is a Flutter mobile app that showcases:
- Zero-Knowledge Proof generation using Noir circuits
- Reown Appkit (WalletConnect) integration for blockchain wallet connectivity
- On-chain proof verification on Ethereum Sepolia testnet
- Cross-platform mobile ZKP capabilities (iOS & Android)
The app allows users to generate cryptographic proofs on their mobile devices and verify them both locally and on-chain, all while maintaining privacy through zero-knowledge cryptography.
ā
Core Architecture
- Rust core with ZK proving via Circom circuits using Groth16 proofs
- UniFFI bindings auto-generate native mobile interfaces (iOS/Android)
- Flutter cross-platform frontend with WalletConnect integration
ā
Key Technologies
ZK Proof Stack:
- Circom/Groth16 for zero-knowledge circuits (multiplier2 example)
- Arkworks backend for proof generation/verification
- rust-witness macro transpiles WASM circuits to Rust at build time
Mobile Bridge:
- UniFFI generates type-safe bindings from Rust ā Swift/Kotlin
- JNA (Java Native Access) for Android FFI
- C headers for iOS with XCFramework packaging
Mobile Integration:
- ReownAppKit (WalletConnect v2) for wallet connections
- Deep links handle wallet callback responses
- Multi-chain support (Ethereum, Polygon, Sepolia)
ā
Notable Implementation Details
Hacky/Clever Parts:
- Build-time circuit compilation -
build.rs
transpiles WASM circuits to native Rust witnesses
- UniFFI macro magic -
mopro_ffi::app!()
auto-generates 6+ proof functions (Circom/Halo2/Noir)
- Flutter plugin structure - Self-contained plugin with bundled native binaries
- Network security bypass - Android config allows cleartext for WalletConnect relays
Architecture Flow:
- Flutter UI captures inputs ā
- Calls Rust via UniFFI ā
- Generates ZK proof with circuit witness ā
- Returns proof to Flutter ā
- WalletConnect integration for blockchain interaction