Skip to main content

What is Umbra?

Umbra adds a privacy layer on top of standard Solana SPL and Token-2022 tokens. It lets you:
  • Shield balances — move tokens from a public Associated Token Account (ATA) into an EncryptedTokenAccount (ETA) where the balance is hidden from everyone except authorized viewers.
  • Transfer anonymously — write a Stealth Pool Note into a shared mixer tree, then burn it from any wallet with no on-chain linkage to the sender.
  • Control who sees what — grant selective viewing access to auditors or compliance systems without exposing your full history.
Everything runs on Solana using a combination of on-chain programs and Arcium multi-party computation (MPC) for the confidential arithmetic.
You do not need to understand MPC or zero-knowledge proofs to use Umbra. The SDK handles all cryptographic operations for you.

Key terms

The SDK and these docs use this vocabulary throughout:
  • ATAAssociatedTokenAccount. A standard SPL Associated Token Account holding plaintext tokens.
  • ETAEncryptedTokenAccount. An Umbra-managed account whose balance is encrypted. Two modes: MXE-only (Arcium decrypts) and Shared (the user can also decrypt locally).
  • Stealth Pool Note — a leaf in the shared mixer tree. On-chain it is a commitment in the Indexed Merkle Tree; the SDK surfaces it as a “note”.
  • Burn — consuming a note: it reveals the note’s nullifier on-chain and credits the destination balance.
The on-chain instruction is burn_* and the relayer endpoint is /v1/claims — the wire protocol uses these lower-level nouns, and a handful of TS aliases bridge them so the relayer client plugs into the burner factories unchanged. You should not need to touch any of that as an SDK consumer.

Core Concepts at a Glance

Encrypted Balances

Shield any SPL or Token-2022 token balance in an EncryptedTokenAccount. Only you — and anyone you explicitly grant access to — can see the amount.

Stealth Pool

Break the on-chain link between sender and recipient using a shared Merkle tree of Stealth Pool Notes and zero-knowledge burn proofs.

SDK

One TypeScript package, @umbra-privacy/sdk. The ZK prover, indexer client, and relayer client all ship as subpath modules — no separate @umbra-privacy/web-zk-prover package.

Indexer API

A read-only REST API for Stealth Pool Note records and Merkle proofs — used internally by the SDK and available for direct integration.

How It Fits Into Your Stack

Umbra is designed to slot into an existing Solana application. You bring your wallet adapter; Umbra handles the rest.
Your App
  └── Wallet (Phantom, Solflare, etc.)
        └── Umbra SDK (@umbra-privacy/sdk)
              ├── Solana RPC     — sends and confirms transactions
              ├── Arcium MPC     — performs confidential computation off-chain
              ├── Umbra Indexer  — indexes Stealth Pool Notes + Merkle proofs
              ├── Umbra Relayer  — submits burn transactions for the user
              └── ZK prover      — Groth16 (snarkjs), runs in a Web Worker

Program IDs

The Umbra on-chain program is deployed at different addresses per network:
  • Mainnet: UMBRAD2ishebJTcgCLkTkNUx1v3GyoAgpTRPeWoLykh
  • Devnet: DSuKkyqGVGgo4QtPABfxKJKygUDACbUhirnuv63mEpAJ
The SDK resolves the correct program address automatically based on the network parameter.

Supported Networks

  • mainnet — Production. wSOL, USDC, USDT, UMBRA, CASH, ZINC.
  • devnet — Development and integration testing. wSOL only.
  • localnet — Local validator. wSOL only.

Next Steps

Quickstart

Install the SDK and run your first deposit + burn in under 5 minutes.

How Umbra Works

Understand the privacy model before you start building.