ZK proof of reserves: prove true solvency on Solva
Prove true solvency, without revealing a thing.
Solva continuously proves your reserves meet or exceed your liabilities. Every result is verified on-chain on Stellar, and customer data never leaves your perimeter.
Built for the institutions that move money
The problem
Attestations are stale, partial, and gameable.
A quarterly PDF signed by an auditor tells you what a balance sheet looked like on one day, months ago. It shows that reserves exist, not that they cover what is owed. Funds can be borrowed for the snapshot and gone by the next morning.
FTX passed its audits. Reserves without a liabilities check are theatre. Solvency is a live property, so it should be proven continuously, in math, and in the open.
How it works
Four steps, end‑to‑end.
From raw ledger to an on-chain proof anyone can verify. Your data never leaves the building.
Attest
Connect ledgers and custody. Solva reads reserves and liabilities inside your perimeter. Raw balances stay local and are never transmitted.
Commit
Balances are folded into a cryptographic commitment: a Merkle tree of liabilities and a reserve total. The commitment binds the proof to exact figures without exposing them.
Prove
A zero-knowledge circuit proves reserves are at least liabilities and that every customer balance is included. It reveals nothing else, just the single yes or no.
Verify
The proof is verified inside a Stellar smart contract and recorded on-chain. Anyone can check it themselves, whether a regulator, a counterparty, or the public, for a fraction of a cent.
Not proof of reserves. Proof of solvency.
True solvency
Proves reserves are at least liabilities, not just that assets exist somewhere.
Continuous
A live proof every block, not a quarterly PDF months out of date.
Private by default
Zero-knowledge: individual customer balances are never revealed.
On-chain and public
Verified in a Stellar contract, so anyone can check it.
Edge proving
Proofs are generated inside your infrastructure. Raw data never leaves.
Selective disclosure
Reveal exactly what a regulator needs, and nothing more.
for
Banks & fintechs
Demonstrate solvency to regulators in real time.
for
Exchanges
Give users proof they can actually trust.
for
Stablecoin issuers
Prove full backing, continuously, on-chain.
for
Regulators
Verify solvency without bulk customer data.
Reserves ≥ Liabilities
The one invariant, held every block.
Solva tracks the margin between what you hold and what you owe. The proof only succeeds while the green line stays above the grey, and that result is what lands on-chain.
Verified on Stellar
Every proof is settled in a public smart contract. Do not trust Solva, verify the math yourself.
5s
to verify on-chain
<$0.01
per published proof
Developers
Three calls to a proof.
A typed SDK, a mock open-banking sandbox, and a registry you can query. Prove, publish, and verify inclusion, without ever touching a circuit.
import { Solva } from "@solva/sdk";const solva = new Solva({ apiKey: process.env.SOLVA_KEY });// prove reserves >= liabilities, privatelyconst proof = await solva.prove({reserves: ledger.reserves, // stays on-premliabilities: ledger.liabilities, // never leaves});await solva.publish(proof); // -> Stellar, ~5s
Your data never leaves
Proving happens at the edge, inside your own infrastructure. Solva sees commitments and proofs, never raw balances, names, or accounts. There is no honeypot to breach.
- Trust the math, not the vendor
- Audited circuits and Stellar contracts
- Nothing revealed beyond R ≥ L
A solvency oracle for agents
Solva exposes a machine-verifiable solvency feed over MCP and a public API. Autonomous agents can check counterparty solvency before they transact. No trust assumptions, no phone calls.
→ { solvent: true, margin_bps: 1240, ✓ }
customer data exposed
of liabilities included
continuous proving
on-chain verification
Questions, answered.
Prove it. Continuously.
See Solva run against your own ledger in a private sandbox. No customer data required.