What is Mini Veil
Overview of the private transfer protocol on Solana
Overview#
Mini Veil is a zero-knowledge privacy protocol on Solana that enables private transfers of SOL (SPL token support coming soon). It combines a Poseidon-based Merkle tree anonymity pool, Groth16 zero-knowledge proofs, and Dual-Key Stealth Address Protocol (DKSAP) to achieve unlinkable transactions.
Protocol Status
Mini Veil is currently in devnet. The program is deployed at 7zKs14NrKub1ED6eCxdjC1K2yB1YTczcH8UTyCPuoQCE. All circuits have undergone a Powers of Tau trusted setup.
Core Primitives#
| Primitive | Description |
|---|---|---|
| Anonymity Pool | A Poseidon Merkle tree (depth 20) storing note commitments |
| ZK Circuit | Groth16 proof of Merkle membership without revealing which leaf |
| Stealth Addresses | One-time Ed25519 addresses per transaction via DKSAP |
| Nullifiers | Unique spend identifiers that prevent double-spending |
| SPL Token Pools | Coming Soon — Token pool support is implemented in the program but not yet available in the frontend |
| ETA (Confidential Amounts) | Coming Soon — Encrypted Transfer Amount for confidential balance states |
| Relayer | Off-chain service maintaining the Merkle tree and submitting root updates |
How It Works#
The protocol operates in three phases:
Shield. A sender deposits SOL into the pool vault. A Poseidon commitment of their note (nullifier + secret) is inserted into the Merkle tree. An off-chain relayer accumulates deposits and periodically updates the on-chain Merkle root via a 2-of-3 multisig.
Unshield. The sender generates a Groth16 proof that:
- Their note is in the Merkle tree (inclusion proof)
- They know the note's secret and spending key
- The recipient is a valid stealth address
- The denomination matches the pool
The proof is verified on-chain via Solana's alt_bn128 pairing syscalls. The vault transfers the denomination to the recipient's stealth address.
Announce + Claim. The sender publishes a stealth announcement containing an ephemeral public key, view tag, and encrypted key material. The recipient scans announcements, derives their stealth private key, and claims funds to their main wallet.
Denominations#
Mini Veil supports three pool denominations:
| Denomination | Lamports | |---|---| | 0.1 SOL | 100,000,000 | | 1 SOL | 1,000,000,000 | | 10 SOL | 10,000,000,000 |
Each denomination has its own Merkle tree, vault, and relayer instance.
Key Properties#
- Unlinkability. No on-chain link between shield and unshield transactions
- Sender privacy. The ZK proof hides which leaf in the tree is being spent
- Recipient privacy. Stealth addresses are one-time and derived per transaction
- No trusted coordinator. The relayer is permissionless and the multisig prevents single-party root control
- Client-side proving. All ZK proof generation happens in the browser via snarkjs