Prove you're solvent. Reveal nothing.
A real-time zero-knowledge oracle that proves a Stellar issuer's reserves โฅ liabilities on-chain โ leaking no customer balance and no true total.
attest_reserves(proof, root, L, R, ax, ay)
โ valid proof โ true
โ tampered โ false
Stellar Hacks: Real-World ZK ยท DoraHacks
Privacy leakage
Standard PoR unmasks individual customer balances and the issuer's exact total assets to competitors.
Retrospective
Audits are a quarter-old snapshot, signed by an accounting firm you also have to trust.
No live signal
By publication, the reserves an attestation describes may already be gone. One rumor โ a run.
Crisp encodes the whole liability book as a ZK Merkle-Sum Tree and proves one statement on-chain: "liabilities sum to L, reserves R โฅ L, and I signed this" โ revealing no balance and no exact figure.
โก Real-time
scrape โ prove โ attest
๐ Zero leakage
balances salted & blinded
๐๏ธ Issuer-bound
in-circuit EdDSA signature
๐ Inclusion
holder verifies in <1s
$ npm run prove:demo
1. Connect Freighter โ Issuer Dashboard
2. Scrape holder balances (Horizon)
3. Merkle-Sum Tree + Groth16 + EdDSA(root)
4. attest_reserves(...) โ BN254 pairing on-chain
valid proof โ true โ
tampered input โ false โ (negative control)
5. Customer salt โ local inclusion check <1s
Honest status: the hosted web app is a demo sandbox for UX; the load-bearing ZK is prove:demo + the deployed contract.
ZK Circuit
Circom/Groth16 over bn128 ยท Merkle-Sum + Poseidon + EdDSA-Poseidon ยท ~30k constraints ยท nPublic = 5
Verifier
Rust/Soroban 26 ยท env.crypto().bn254().pairing_check() runs full Groth16 on-chain (Protocol 25/26) ยท g1_mul/g1_add MSM
Indexer
Stellar Horizon ยท native balance/trustline scraping, no custom node
App
Next.js 16 / React 19 / Supabase ยท roots indexed from on-chain events
A raw-WASM pairing check would exhaust Soroban's CPU budget โ Crisp leans on the native host functions exactly where it counts.
$200B+
stablecoin market cap โ every dollar a liability someone must prove is backed.
MiCA
+ US frameworks + exchange PoR mandates force recurring attestation.
10ร
better than the audits issuers already pay for โ faster, private, continuous.
Attestation-as-a-Service โ SaaS per attestation cadence (hourly/daily/on-demand).
"Crisp Verified โ" SDK โ wallets, exchanges & aggregators embed the badge. Freemium โ enterprise.
Compliance data layer โ historical solvency roots for auditors & regulators (premium analytics).
Cost moat โ sub-cent Soroban verification โ attest continuously at a price legacy auditors can't touch.
| Big-4 audit | On-chain Merkle PoR | Crisp | |
|---|---|---|---|
| Real-time | โ | โ ๏ธ | โ |
| Privacy | โ ๏ธ NDA | โ | โ |
| Trustless | โ | โ | โ |
| Issuer-bound | PDF sig | โ anyone posts | โ in-circuit EdDSA |
| Cost / attestation | $$$$ | gas | sub-cent |
Most ZK PoR demos let anyone post a root. Crisp's BabyJubjub EdDSA binds the proof to the issuer's key.
โ Verifies on testnet
Real Groth16 proof accepted on-chain โ reproduce with npm run prove:demo.
โ Negative control
Tampered inputs rejected on-chain โ verification is real, not theater.
โ Hardened circuit
Added in-circuit EdDSA identity binding: 21,908 โ ~30,000 constraints.
โ Measured cost
Pairing check โ 22.4M CPU (~22% budget), ~120KB mem; G1 op โ 14,488 CPU.
30 DAYS
Redeploy BN254 + EdDSA contract; stellar.expert verified + live attestation explorer.
60 DAYS
In-browser proving (snarkjs WASM), multi-asset reserve baskets, distributed scrapers.
90 DAYS
Multi-issuer registry + regulator read-API; first design-partner issuer; badge SDK.
Edy Cu
full-stack + applied-ZK engineer
Solo-built the entire stack โ Circom circuits (Merkle-Sum + Poseidon + EdDSA), the Rust/Soroban verifier, the Horizon scraper, and the Next.js dashboard. One of five real on-chain ZK products shipped for this hackathon.
Crisp makes solvency a continuous, private, on-chain fact โ the missing primitive for every regulated issuer on Stellar.