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
- Your score is the private input (witness) to a Groth16 circuit
- The circuit encodes the statement (e.g., "score > 700")
- A proof (~256 bytes) is generated that anyone can verify
- Verification is instant and reveals nothing about the actual score
- 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
| Type | Description | Use Case |
|---|---|---|
ScoreAboveThreshold | Score > N in a category | DeFi lending qualification |
AgeAboveMinimum | User is ≥ N years old | Cannabis compliance |
KYCVerified | KYC has been completed | Regulatory 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.