System Diagram
The core flow
The originating VASP generates a ZK proof that compliance was performed, encrypts the PII, and sends both to the counterparty. The counterparty verifies the proof without seeing the raw data. On-chain recording is optional.
Step by step
1. Proof generation (originating VASP)
The Circom circuit composes four subcircuits: credential validity, sanctions non-membership, amount tier, and domain binding + expiration. Output is a 192-byte Groth16 proof with 16 public signals.
2. What goes into the hybrid payload
The hybrid payload bundles the ZK proof with AES-256-GCM encrypted PII. The proof is publicly verifiable. The PII is readable only by the intended counterparty.
3. Transmission options
The payload is transmitted via existing Travel Rule protocols. clearproof replaces the payload content, not the transport.
4. Beneficiary verification
The beneficiary verifies the proof locally in under 1ms using the TypeScript SDK. PII is decrypted for record-keeping as required by FATF.
On-chain contracts
Four contracts deployed on Sepolia. ComplianceRegistry orchestrates verification by calling the Groth16Verifier, checking the VASPRegistry, and validating against the SanctionsOracle.
What the proof reveals vs. hides
All 16 public signals are designed to prove compliance without exposing private data. See the circuits page for the full signal table.
Sanctions oracle update
The sanctions Merkle tree is rebuilt daily from OFAC and EU data. Updates follow a PR-based workflow with human review before the root is relayed on-chain.
VASP discovery
New VASPs join by publishing a well-known JSON file and registering on-chain. Discovery is automatic — no manual configuration.
Regulatory audit path
Regulators access plaintext PII through the VASP’s internal records, not through the blockchain. The ZK proof and on-chain events provide a verifiable audit trail.