PRIVATE PAYMENTSFOR SOLANA

Encrypted balances, stealth recipients, and unlinkable transfers secured by zero-knowledge cryptography.

Privacy is infrastructure.

Privacy Primitives

Four interconnected protocols that together form a complete private payments infrastructure.

Mixer Pool

Shield SOL and SPL tokens into anonymity pools. Withdraw to any address with a zero-knowledge proof — no link between deposit and withdrawal.

Encrypted Accounts

Confidential token balances secured by Poseidon stream encryption. Update balances off-chain and submit proofs without revealing amounts.

Stealth Addresses

One-time addresses for unlinkable payments using dual-key stealth address protocol. Sender derives a unique address from your keys — only you can scan and claim.

Key Registry

On-chain identity without revealing your identity. Register cryptographic material once — receive private payments from anyone without exposing your public address.

How It Works

A complete private payments lifecycle — from key registration to claiming.

01

Register Keys

Generate a viewing key and spending key. Register your public keys on-chain — once registered, anyone can send you private payments.

02

Shield or Create Account

Deposit SOL into a mixer pool to break linkability, or create an encrypted token account for confidential balance management.

03

Send Privately

Look up the recipient's registered keys, derive a one-time stealth address, and send funds. The recipient generates the corresponding private key, and an on-chain announcement enables discovery.

04

Claim or Unshield

Scan for incoming stealth payments, claim them using your derived private key, or unshield from a mixer pool with a zero-knowledge proof.

Security Model

Cryptographic guarantees, not policy promises. Every operation is provably correct.

Zero-Knowledge Proofs

All private state transitions are validated client-side and proven on-chain using Groth16. The network verifies correctness without ever seeing the underlying data.

On-Chain Verification

Solana's alt_bn128 pairing precompiles verify Groth16 proofs directly. No oracles, no relayers, no trusted third parties — the chain is the sole arbiter.

No Trust Assumptions

Privacy is enforced by cryptography, not policy. Dual-key stealth addresses, Poseidon encryption, and Merkle inclusion proofs ensure mathematical guarantees.

Build With Mini Veil

Integrate private payments into your dApp with a few lines of code.

TypeScript
import { createScalarSigner } from "@mini-veil/core";
import { Program } from "@coral-xyz/anchor";

// Derive stealth address for recipient
const stealthAddress = deriveStealthAddress(
  recipientSpendingKey,
  senderEphemeralKey
);

// Send SOL to stealth address
await program.methods
  .transfer(new BN(amount))
  .accounts({ from: sender, to: stealthAddress })
  .rpc();

// Recipient scans and claims
const stealthKey = scanForPayments(
  spendingPrivKey,
  viewingPrivKey
);
const signer = createScalarSigner(stealthKey);
Rust / Anchor
use mini_veil::state::NullifierAccount;

#[derive(Accounts)]
pub struct ClaimStealth<'info> {
    #[account(mut)]
    pub stealth_address: Signer<'info>,
    #[account(mut)]
    pub recipient: SystemAccount<'info>,
    pub system_program: Program<'info, System>,
}

pub fn claim_stealth(ctx: Context<ClaimStealth>, amount: u64) -> Result<()> {
    **ctx
        .accounts
        .stealth_address
        .to_account_info()
        .try_borrow_mut_lamports()? -= amount;
    **ctx
        .accounts
        .recipient
        .to_account_info()
        .try_borrow_mut_lamports()? += amount;
    Ok(())
}

Civilizational Infrastructure

Privacy is a
civilizational right.

Private payments are not a feature. They are foundational infrastructure for a free digital society.