Bullet
Web3 Payments · Jul 2026 · Co-founder & Engineer

Anyone can send payments on Stellar without broadcasting the amount and recipient to the entire world.
The problem
Every transaction on a public blockchain is visible to anyone, forever. Salaries, invoices, and personal transfers become open books.
The goal was a payment rail on Stellar where transfers stay private but remain verifiable.
What I built
- A send/receive flow that feels like a normal payments app
- Fixed-amount private notes in USDC, USDT, or XLM, sent to an X handle or email
- Zero-knowledge proofs generated entirely in the browser
- On-chain verification, so a claim can't be linked back to its deposit
How it works
Groth16 proofs are built with Circom and snarkjs in the browser, then verified on-chain using Soroban's native BLS12-381 host functions. Deposits go into a Poseidon Merkle tree, and claims reveal only a nullifier, which prevents double-spends without linking the claim to its deposit.
Payments are fixed-amount notes rather than arbitrary values, which keeps the anonymity set meaningful: every note of a given denomination looks identical on-chain.
Stack
- Next.js
- TypeScript
- Rust
- Stellar
- Soroban
- Circom
- snarkjs
- Supabase
Images


Need something like this?