clearproof
ZK infrastructure for compliant value transfer. Prove sanctions clearance, credential validity, and jurisdiction-correct tier encoding — without revealing private data.
$ npm install @clearproof/circuits @clearproof/proof snarkjs
+ @clearproof/circuits@0.2.0
+ @clearproof/proof@0.1.0
How it works
The originating VASP generates a ZK proof locally. The proof attests that compliance was performed correctly. Encrypted PII travels alongside. The beneficiary verifies the proof on-chain or off-chain in under 50ms.
16 public signals
Everything the verifier needs. Nothing the verifier shouldn't see. Private data stays with the prover.
| Idx | Signal | Purpose |
|---|---|---|
| 0 | is_compliant | All checks pass |
| 1 | sar_review_flag | Tier >= 3 (advisory) |
| 2 | sanctions_tree_root | OFAC/UN/EU root |
| 3 | issuer_tree_root | Trusted issuer root |
| 4 | amount_tier | 1-4 (not exact amount) |
| 5 | transfer_timestamp | Unix epoch |
| 6 | jurisdiction_code | ISO 3166 |
| 7 | credential_commitment | Poseidon hash |
| 8-10 | tier thresholds | Jurisdiction boundaries |
| 11 | domain_chain_id | Chain binding |
| 12 | domain_contract_hash | Contract binding |
| 13 | transfer_id_hash | Transfer binding |
| 14 | credential_nullifier | One-time use |
| 15 | proof_expires_at | TTL enforcement |
Contracts
SepoliaAll contracts are verified on Etherscan. Source code is readable on-chain.
Packages
Install from npm. Use the circuits in your own project, or generate proofs with the TypeScript SDK.
Security properties
Quick start
# Install
npm install @clearproof/circuits @clearproof/proof snarkjs
# Generate a proof (TypeScript)
import { generateProof } from '@clearproof/proof';
import { artifacts } from '@clearproof/circuits';
const { proof, publicSignals } = await generateProof(
input, artifacts.wasmPath, artifacts.zkeyPath
);
# Or run the 60-second demo
npx @clearproof/cli demo