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
connect

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

0x2e840fa1134824f2b8d72ddb2009f6200b7d35fd88fe84cee1825cef6706fbf4

publicSignals[1] · nullifier

0xcd3c3ca62519cda41bf0a15e4179d6dc95696a160103c72c042a2b36888e788c

publicSignals[2] · programId

7

publicSignals[3] · accessLevel

0

Execution 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.