Inspiration Coordination still depends on trust or surveillance. DAOs gate events with spreadsheets, GPS logs, or identity checks that leak far more than needed. We wanted a way to prove “I was there” without revealing who you are, where you were, or leaving a trail that can be correlated across contexts.
What it does zk-Presence Protocol issues privacy-preserving presence proofs. Participants generate a zero-knowledge proof that they satisfied an event predicate; verifiers check it on-chain or off-chain, and neither party learns anything beyond “valid presence for this scope.”
Presence predicate: A check that confirms event parameters and a user commitment without revealing sensitive details.
Scoped nullifier: Prevents double-attendance per event while staying unlinkable across different scopes.
Anchors: Optional on-chain commitment or off-chain signed receipt for fast verification.
How we built it
Circuits and proofs: Model presence as a zero-knowledge predicate and produce a proof where the verifier only learns that the presence is valid.
Security properties:
Completeness: Honest proofs always verify.
Soundness: Invalid claims fail to verify.
Zero-knowledge: Verifiers learn nothing beyond validity.
Implementation:
Frontends: Role-based Next.js for issuers, participants, and verifiers (QR/link handshakes).
Verification: Browser/serverless verifier toolkit and Polkadot integration for anchoring commitments.
Operations: Versioned prover artifacts and a documented threat model to align circuits, APIs, and anchors.
Challenges we ran into
Time-to-proof: Keeping browser-side proof generation under a few seconds on consumer hardware.
Anti-replay without tracking: Designing replay protection that doesn’t drift into identity logging.
Interoperability: Normalizing verification across different runtimes and signature schemes.
Dev ergonomics: Circuit changes rippling through frontends, APIs, and anchor logic.
Accomplishments that we're proud of
Privacy-first design: Unlinkable commitments with scoped nullifiers that prevent double-attendance without correlation.
Dual verification paths: On-chain anchors for durability and off-chain receipts for speed and cost efficiency.
Usable UX: One-click proof generation, QR-based verification, and clear failure modes.
Threat model: Documented adversaries (collusion, replay, coercion) shaping both protocol and UI.
What we learned
UX vs. cryptography: Witness generation and circuit choices directly impact user flows.
Scope is everything: Nullifier scoping is the boundary between privacy and correlation.
Anchors are trade-offs: Durability and auditability vs. latency and cost; give verifiers both options.
Security is product: Modeling coercion, collusion, and replay drives practical design as much as math.
What's next for zk-Presence Protocol
Selective disclosure: Add scoped claims (e.g., role, quota) without identity leakage.
Verifier SDKs: Idiomatic packages for Rust, TypeScript, and mobile.
Audits and benchmarks: Formal circuit review; latency and gas measurements for typical anchors.
Community integrations: DAO event tooling, contribution attestations, and privacy-safe gating.
Open collaboration: Expand adapters, refine the threat model, and stress-test real-world flows.
Log in or sign up for Devpost to join the conversation.