getting started

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.

i

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