PonsPass

Prove you qualify.
Keep your wallet private.

Zero-knowledge eligibility without sharing your balance with the verifier.

Issuer verifies eligibility. Apps receive a proof.

01 / How it works

A little proof.
A lot less disclosure.

Access should depend on whether you qualify.
It shouldn’t require your entire financial story.

01

Issue

Establish your eligibility.

Prove control of your wallet to the issuer with a message signature. The issuer checks your Robinhood Chain balance at a specific block and issues a credential valid for 10 minutes.

The issuer knows your wallet.
02

Prove

Share the answer, not the balance.

Your browser generates a zero-knowledge proof that an active credential meets the balance requirement. Your exact balance, wallet address, and credential stay out of the verifier request.

Groth16 proof generation runs in your browser.
03

Access

Let the application verify.

The application verifies a proof bound to its challenge and your session. A valid proof opens a protected endpoint; expired, revoked, or reused proofs are rejected.

A one-time challenge protects each access session.

Privacy has a boundary. The issuer still knows the wallet, and the blockchain remains public. PonsPass is designed to reduce what an application needs to see.

02 / The protocol

A bridge between
eligibility and privacy.

A ZK protocol for proving a balance requirement without sending the balance to the verifier.

Understand the trust model

Robinhood Chain · single-operator setup

The protocol uses a Circom circuit, Poseidon credential commitments, and Groth16 proofs. A browser prover, issuer API, session verifier, and credential revocation are implemented. The exported Solidity verifier is tested on a local Ethereum node.

  1. Wallet holderProves control to the issuer
  2. Credential issuerChecks a snapshot · issues a temporary credential
  3. Local proof generationProves a requirement against the credential
  4. Application verifierChecks a proof tied to its challenge and session

Single-operator phase-2 setup. No independent contribution or security audit. Parameter security depends on the coordinator’s setup process.

03 / For developers

Less data to hold.
More room to build.

An eligibility result your application can use. A portfolio it doesn’t need to collect.

The source includes the circuit, issuer and verifier HTTP endpoints, browser proving worker, exported Solidity verifier, and end-to-end tests. The current policy checks at least 0.0001 native ETH on Robinhood Chain mainnet.

The hosted app uses a mainnet balance snapshot and message signatures. It requests no asset transfer or token approval. A local development mode is also available in the repository; no public SDK is offered.

Read the design notes

04 / Documentation

Know what’s behind the proof.

Design notes, current boundaries,
and the work still ahead.

What does a PonsPass credential represent?

A credential commits to a holder secret, snapshot balance, expiry, policy, block number, and a unique issuance nonce. The issuer adds its commitment to an active Merkle tree. The circuit proves membership and eligibility without exposing those private fields. Credentials last 10 minutes and do not prove a real-time balance.

Who can see my wallet and portfolio?

The issuer knows your wallet and snapshot balance. Your browser keeps the holder secret and proof witness; the verifier receives a proof and public policy/session signals. This local build runs issuer and verifier in one service, so shared cookies, timing, and network metadata can correlate activity. Small credential sets also weaken privacy. It is not anonymous.

How do expiry, revocation, and replay protection work?

The circuit checks that credential expiry exceeds the access deadline. Revocation removes the credential from the accepted Merkle root. The verifier checks the latest root and a two-minute session challenge, then consumes that challenge once. Changes to the active credential set invalidate existing access sessions, which must prove again.

Can I integrate or generate a proof today?

Open the app and connect an eligible wallet on Robinhood Chain mainnet (4663). Sign an issuance message, generate a proof in your browser, and verify it to unlock the protected response. This release uses a single-operator setup and is unaudited.

What remains before production use?

The current mainnet release relies on one operator for phase-2 parameter setup and has no security audit. Independent contributions, security review, issuer/verifier separation and stronger metadata privacy remain future work. Issuer records persist; access sessions reset when the service restarts.