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.

Share this project:

Updates

Submission history