StellarHub · Confidential Send — proof-verify building block

Confidential payment, verified on-chain

Prove a payment whose amount is hidden, then really verify that proof on Stellar testnet — the demo funds a fresh key and calls the Soroban verify_proof contract for real, and shows you the transaction.

Model C · private_transfer snarkjs + Soroban testnet · dev trusted setup

This is not a money transfer. verify_proof only checks the proof on-chain (returns true/false) — no funds move. What it proves: the amount lived only inside the proof, and the chain accepts it without ever seeing the value.

The amount is a private input. The proof's public signals are only [commitment, nullifier]. Tamper one and the on-chain verify returns false — try Tamper after.

This page is the FALLBACK building-block demo. The main demo — a REAL hidden-amount transfer on the wallet's live pool — runs the full flow: deposit → sealed-note ZK transfer → recipient-side recovery. CLI twin: npx tsx e2e/confidential-transfer-e2e.ts.

Confidential payment

XLM

The amount, the recipient and fresh per-payment secrets never leave this page. Only the proof + its public signals (commitment, nullifierno amount) are sent to the contract.

Result

🌐 Public — what the chain saw
commitment
nullifier
No amount field. The contract verified the proof; the value was never sent.
🔒 Private — only on your device
amount
recipient
blinding · secret · serial
Never sent anywhere. The private witness of the proof.
Show raw Groth16 proof (submission payload)