Private settlement · built on Stellar

Settle the difference,
not the data.

SettleZK lets companies that owe each other pay only the net difference, not every invoice. The amounts stay private, and a proof shows the math is honest without ever revealing who owed whom.

your debts + a secret  →  sealed fingerprint 0x8f3a…c21
Zero-KnowledgeStellarSorobanRustWebAssemblyCircomsnarkjsGroth16BN254PoseidonEdDSANext.jsTypeScriptthree.jsTailwind CSSNode.jsZero-KnowledgeStellarSorobanRustWebAssemblyCircomsnarkjsGroth16BN254PoseidonEdDSANext.jsTypeScriptthree.jsTailwind CSSNode.js
The 360 → 80 collapse

A tangled web of debts becomes a few net transfers.

Picture four firms (A, B, C and D) that owe each other all over the place. Rather than pay every IOU, they net it out and move only the leftover. Below, the pile of private debts collapses into a couple of transfers. Nobody sees the individual amounts; a zero-knowledge proof is what lets everyone trust the result anyway, like proving you added up a column correctly without showing the figures.

Who owes whom · private

gross 360
AowesB
100
BowesA
50
BowesC
100
CowesA
80
DowesA
30

5 separate debts — never revealed on-chain

0%
ZK netting

What actually moves · public

net 80
Aawaiting proof…
Bawaiting proof…
Cawaiting proof…
Dawaiting proof…
Groth16 proof verified on Soroban
How it works

Four steps, one proof.

From a tangle of private debts to one clean settlement. Here is what each step actually does.

01

Commit

Each firm publishes Poseidon(row, salt) on-chain, signed with its own key. The raw numbers never leave the firm.

In plain English: Each firm locks its own row of numbers into a sealed fingerprint. Only the fingerprint goes public; the numbers stay home.

scroll to reveal
02

Prove

The coordinator assembles the matrix off-chain and generates a single Groth16 proof of the entire netting.

In plain English: Every check that the netting was done right gets bundled into one small proof.

scroll to reveal
03

Verify

Soroban verifies the BN254 proof and binds it to the published commitments and registered keys.

In plain English: The Stellar contract checks the proof and locks the result in.

scroll to reveal
04

Settle

Net payers fund an escrow; receivers withdraw over the standard token interface. Only the difference moves.

In plain English: Only the leftover moves: the firms that owe pay in, the ones owed take out.

scroll to reveal
Why the ZK is load-bearing

One proof closes every cheating vector.

Why not just publish the numbers afterward, or run the whole thing on an ordinary smart contract? Both would force the private debts into the open. One zero-knowledge proof checks every rule at once and keeps the numbers sealed.

01

Real debts

Each row is signed by its owner with EdDSA, verified inside the circuit — the clearing house can't fabricate a debt on anyone's behalf.

02

No illegal amounts

Every debt is range-checked to a non-negative bound, and the diagonal is forced to zero — no negatives, no overflow, no self-debt.

03

Bound to commitments

The proof must open to exactly the commitments each party published — no swapping in different data.

04

Correct net

Pay and receive positions are derived from the matrix and proven to balance.

05

Conservation

Total paid equals total received. Money is neither created nor destroyed.

Trust model

Honest by design.

A trusted clearing house sees the raw rows — exactly like a real clearing house — while the public and other companies stay fully blind. Removing that last bit of trust, so the clearing house sees nothing either, is the next step: secure multi-party computation, on the roadmap.

What the clearing house still cannot do

  • Forge a debt on your behalf — blocked by in-circuit EdDSA + on-chain key binding.
  • Publish a wrong net result — blocked by the Groth16 proof.
  • Unbalance the books — blocked by the conservation constraint.
  • Swap in data you didn't agree to — blocked by commitment binding.

The blockchain and public observers see only commitments (hashes) and the final net settlement results. All bilateral debt data remains completely hidden.

Bilateral debts D[i][j]sealed
Individual saltssealed
Commitment hashes
Net pay/recv results
ZK proof (π)
EdDSA signaturessealed
Data flowblind
A▮▮▮
B▮▮▮
C▮▮▮
D▮▮▮
Clearing House
On-chain
commit[0..3]
net_pay[]
proof π
0%
less value settled
0
bilateral debts revealed
BN254
Groth16 verified on Soroban
n=4
MVP, live on testnet

Settle privately. Prove publicly.

Run the full lifecycle on Stellar testnet — commit, prove, verify, and settle, all in your browser.