pool

privacy pool · deposit + batch-withdraw via aggregated proof

The pool contract holds testnet XLM. Anyone can deposit (your signer is visible). Withdrawals settle in batches via ONE aggregated ZK proof — N transfers in one tx.

why this had to be on Stellar

On EVM you'd call a verifier contract, then a separate multicall to dispatch transfers. Here, Soroban runs the proof verification AND moves the assets in a single invocation. That atomicity is the Stellar-native primitive — and it's why the on-chain cost stays at ~136K stroops regardless of how many withdrawals are inside.

HONEST CAVEAT: the demo's aggregated proof attests the four inner proofs are valid but doesn't bind specific recipients or amounts into the cryptography. A production version would put recipient + amount into the circuit's public inputs. For this demo, the contract verifies the proof and dispatches the transfers you requested — the architecture is correct, the binding is the next iteration.
Freighter not installed · install →
01deposit testnet XLM into the pool

Pay XLM, register a commitment. Your account signs the deposit (visible on-chain); the commitment's preimage stays private. Pool funds accumulate; later, any withdrawer with a valid aggregated proof can draw against them.

02batch-withdraw via aggregated proof

Submits the canonical K=4 aggregated proof to the pool contract. The contract verifies the proof (cross-contract call to oneproof_verifier), records 4 nullifiers, and dispatches 4 XLM transfers to your address — all in ONE Stellar transaction.

·pool · live state
tokennative XLM