← All Use Cases
🎟️
Private Access Control
Anonymous Access Passes
Mint event or program passes on-chain without leaking the member, contributor, or attendee address behind the proof. The contract learns only the pass type and program.
A program-scoped nullifier enforces one mint or check-in per member while preserving the privacy of the address that qualified.
Proof System
Groth16 / BN254
Nullifier Scope
Per member, per program
On-Chain Action
Mint or activate pass
Verifier Path
Solidity -> PVM Rust
1
2
3
4
Step 1: Connect Eligible Identity
Connect a wallet, then generate a proof that you belong to the right allowlist without revealing which address qualified.
Prove membership in a program-specific allowlist.
Use a nullifier to prevent multiple mints or duplicate check-ins.
Expose only the pass type while hiding the qualifying wallet.
Current Signal Preview
publicSignals[0] · merkleRoot
0x2e840fa1134824f2b8d72ddb2009f6200b7d35fd88fe84cee1825cef6706fbf4publicSignals[1] · nullifier
0xcd3c3ca62519cda41bf0a15e4179d6dc95696a160103c72c042a2b36888e788cpublicSignals[2] · programId
7publicSignals[3] · accessLevel
0Execution Path
Frontend builds witness + proof in browser
↓ PrivacyPassIssuer.mintPass
Consumer contract validates context + nullifier
↓ verifyProof(proof, publicSignals)
ZKNativeVerifier dispatches to PolkaVM precompile
↓ native arkworks Groth16
182,770 gas · 1039ms
Why This Fits ZKNative
The same verifier supports both mint-once passes and repeated gated actions.
Identity-sensitive communities can gate access without exposing member wallets.
This pattern is especially strong on Polkadot where the verifier cost stays predictable.