Skip to main content

Zero-Knowledge Proofs

Zero-knowledge proofs let you prove a statement about your reputation score without revealing the actual score. For example, prove your DeFi Lending score is above 700 to qualify for an undercollateralized loan — without exposing your portfolio, net worth, or trading strategy.

How It Works

  1. Your score is the private input (witness) to a Groth16 circuit
  2. The circuit encodes the statement (e.g., "score > 700")
  3. A proof (~256 bytes) is generated that anyone can verify
  4. Verification is instant and reveals nothing about the actual score
  5. Proofs can be verified off-chain (API) or on-chain (CredentialVerifier contract)
Soundness Guarantee

It is computationally infeasible to produce a valid proof for a false statement. If your score is 400, you cannot generate a proof that it's above 700.

Generate a Proof

POST /api/v1/reputation/prove
Content-Type: application/json

{
"subject": "0x1234...",
"proofType": "ScoreAboveThreshold",
"category": "DEFI_LENDING",
"threshold": 700
}

Response

{
"proof": "0x1a2b3c...",
"proofType": "ScoreAboveThreshold",
"publicInputs": {
"threshold": 700,
"categoryHash": "0xabc...",
"timestamp": 1709078400
}
}

Verify a Proof

Off-chain (API)

POST /api/v1/reputation/verify
Content-Type: application/json

{"proof": "0x1a2b3c..."}

On-chain (Solidity)

bool valid = credentialVerifier.verifyProof(
proof.a, proof.b, proof.c, proof.publicInputs
);

Proof Types

TypeDescriptionUse Case
ScoreAboveThresholdScore > N in a categoryDeFi lending qualification
AgeAboveMinimumUser is ≥ N years oldCannabis compliance
KYCVerifiedKYC has been completedRegulatory compliance

Circuit Architecture

CrowdProof uses Groth16 SNARKs compiled from Circom circuits:

  • ReputationProof — Proves score > threshold for any category
  • AgeProof — Proves age ≥ minimum without revealing DOB
  • KYCProof — Proves KYC completion without revealing identity data

Each circuit produces a proof verifiable in ~1ms on-chain (200k gas).

Age Verification

Privacy-preserving age verification for cannabis compliance:

POST /api/v1/compliance/age-verify
Content-Type: application/json

{
"walletAddress": "0x1234...",
"minimumAge": 21,
"jurisdictionCode": "US-CO"
}

The user verifies their age once. On subsequent visits, only the ZK proof is presented — no PII is stored or transmitted.