Private transfers,
Smarter compliance
Veil is a shielded wallet and private remittance protocol on Stellar. Send, receive, and transfer across borders with zero on-chain link between sender and recipient. Your shielded wallet manages everything — powered by Groth16 zero-knowledge proofs verified directly on Soroban.
What is Veil?
On public blockchains, every transfer is visible — anyone can trace who sent what to whom. Veil breaks that link. When you deposit tokens into Veil, they enter a shielded pool. When someone withdraws, a zero-knowledge proof proves they have the right to withdraw without revealing which deposit is theirs. The result: complete sender–recipient unlinkability with built-in compliance. Timelocked viewing keys ensure that authorized auditors can verify transaction history after a configurable period — giving you privacy today and accountability when it matters.
How It Works
From receiving funds to sending privately across borders. No on-chain link between sender and recipient at any point.
Open your shielded wallet
Set up your Veil wallet with a PIN. Connect your Freighter wallet and receive funds — tokens enter the shielded pool with a Poseidon commitment added to the on-chain Merkle tree. Your wallet auto-saves the secret note.
Send privately
Enter a recipient address and amount. Your wallet auto-selects the right note, generates a Groth16 zero-knowledge proof entirely in the browser, and submits it on-chain — no manual note handling required.
Send across borders
Choose a remittance corridor (USD→MXN, EUR→NGN, and more). Fiat on-ramps, shielded transfers through the Veil pool, and fiat off-ramps — all visualized in a real-time privacy pipeline.
Stay compliant
Every transaction runs an automatic Privacy Pools compliance check. Timelocked viewing keys let authorized auditors verify activity after a configurable period — privacy today, accountability when it matters.
Private DEX Swaps
Deposit XLM, withdraw as USDC — or any supported token pair. The on-chain swap router changes the token type during withdrawal, adding a second layer of unlinkability on top of the ZK proof. Sender-recipient link broken and token type changed. Inspired by composable privacy on Starknet.
Try Private SwapPrivate Cross-Border Remittance
Send money across borders with transfer amounts private throughout the pipeline. Fiat on-ramp, shielded transfer through the Veil pool, fiat off-ramp — Stellar's real payment rails, made confidential with zero-knowledge proofs.
Try RemittanceWhy Veil?
Privacy without compromise. Real cryptography, real compliance tools, real on-chain verification.
Groth16 on Soroban
Zero-knowledge proofs verified on-chain using Stellar's native BN254 host functions — g1_add, g1_mul, and multi_pairing_check. No off-chain trust assumptions.
Poseidon Hashing
ZK-friendly Poseidon hash function over BN254 Fr for both the Circom circuits and the on-chain Merkle tree. Matching parameters ensure proof validity.
Relayer Network
Submit withdrawals through a relayer so the recipient doesn't need gas. Random delay queuing decorrelates timing between deposit and withdrawal.
Timelocked Viewing Keys
Generate viewing keys that unlock transaction details after a configurable period. Regulators or auditors can verify activity without breaking real-time privacy.
Encrypted On-chain Memos
Attach NaCl-encrypted notes to deposits, stored on-chain. Only the intended recipient can decrypt them — useful for payment references or messages.
Private DEX Swaps
Withdraw as a different token via an on-chain swap router. Deposit XLM, receive USDC — two layers of unlinkability: sender-recipient link AND token type are both broken.
Privacy Pools
Prove your funds are clean without revealing your identity. Based on Vitalik's Privacy Pools paper — compliance-ready privacy using subset membership proofs.
Client-side Proving
Proofs are generated entirely in the browser using snarkjs WASM. Your secret never leaves your device. No server, no trusted third party.
Privacy with Compliance
Most privacy protocols force a choice: hide everything or expose everything. Veil gives you both — private by default, auditable when required.
Timelocked Viewing Keys
Every deposit can generate a viewing key — a separate cryptographic key that unlocks transaction details only after a configurable timelock period expires. While the timelock is active, the transaction remains fully private. Once it expires, authorized holders can see sender, recipient, amount, and memo.
Why This Matters
Regulators and institutions need auditability. Users need privacy. Without compliance tools, privacy protocols get banned or avoided by legitimate users. Veil's viewing key system means businesses can adopt shielded payments while still meeting KYC/AML obligations — making privacy sustainable, not just technically possible.
Under the Hood
The complete privacy pipeline — from deposit commitment to zero-knowledge withdrawal.
Depositor Veil Pool (Soroban) Recipient
───────── ────────────────── ──────────
│ │ │
│── deposit(commitment) ───────▶│ │
│ [100 XLM + Poseidon hash] │ │
│ │◀── Merkle tree insert │
│ │ │
│── share secret note (QR) ────────────────────────────────▶ │
│ │ │
│ │◀── withdraw(proof) ──────── │
│ │ [Groth16 ZK proof] │
│ │ │
│ │── BN254 pairing verify ──▶ │
│ │── nullifier check ────────▶ │
│ │── transfer 100 XLM ───────▶ │
│ │ │
no link ◀────────────────────── zero knowledge ──────────────▶ fundsTech Stack
- Circom 2.0 circuits + snarkjs (Groth16)
- BN254 curve with native Soroban host fns
- Poseidon hash (circomlib + on-chain)
- Incremental Merkle tree (depth 20)
- Client-side WASM proof generation
Security Guarantees
- Sender–recipient unlinkability
- Nullifier prevents double-spending
- On-chain proof verification (no trust)
- Anti-frontrun binding in circuit
- Secrets never leave the browser
Get Started
Start using Veil on Stellar mainnet in four simple steps.
Create your shielded wallet
Set a PIN and connect your Freighter wallet. Make sure Freighter is set to Stellar mainnet.
Receive tokens
Deposit XLM or USDC into the shielded pool. Choose your tier and the secret note is auto-saved — no manual copying needed.
Send privately
Enter a recipient and amount. Your wallet handles note selection, ZK proof generation, and on-chain submission automatically.
Try cross-border remittance
Pick a corridor (USD→MXN, EUR→NGN, and more), enter an amount, and watch the privacy pipeline execute in real time.
Privacy that plays by the rules
Your shielded wallet handles everything — receive, send, and remit across borders with zero-knowledge proofs and built-in compliance, all on Stellar.