The Most Powerful Shielded Pool on Solana
Umbra’s mixer is the most powerful shielded pool on Solana today - and it is built to fit into any flow. Tokens can enter from a public wallet or an encrypted balance, exit to a fresh address or stay private inside another encrypted balance, and be sent to yourself or to any registered recipient. Every combination is a first-class path, not an afterthought.The mixer requires full registration with
anonymous: true. Both your X25519 key and user commitment must be registered before creating UTXOs.UTXO Structure
The mixer operates on UTXOs - commitments inserted into an on-chain Indexed Merkle Tree that represent locked tokens in the shielded pool. Every UTXO encodes three distinct roles:- Sender - the address that funded the UTXO, locked the tokens into the shielded pool, and fixed the recipient at creation time
- Unlocker - the address authorized to burn the UTXO’s nullifier on-chain and release the tokens, choosing whether they exit to a public ATA or into an encrypted balance
- Recipient - the final destination address, set by the sender and not modifiable by the unlocker
UTXO Variants
Self-claimable
You are both the sender and the unlocker. Burn the UTXO on your own schedule and choose whether tokens exit to your public ATA or stay in an encrypted balance.
Receiver-claimable
The recipient is the unlocker. They burn the UTXO themselves and decide the exit - public or shielded. The exit happens entirely on their timeline, with no further action from the sender.
Source Options
Each variant can be funded from two sources:- From encrypted balance - tokens are drawn from your existing ETA before entering the shielded pool
- From public balance - tokens are transferred directly from your public ATA
getCreateSelfClaimableUtxoFromEncryptedBalanceFunction- source: ETA, unlocker: yougetCreateReceiverClaimableUtxoFromEncryptedBalanceFunction- source: ETA, unlocker: recipientgetCreateSelfClaimableUtxoFromPublicBalanceFunction- source: ATA, unlocker: yougetCreateReceiverClaimableUtxoFromPublicBalanceFunction- source: ATA, unlocker: recipient
The Mixer Flow
Create a UTXO
Choose a factory function, specify the source, recipient, and amount, and submit. The SDK locks tokens in the shielded pool, inserts a commitment into the Merkle tree, and publishes an encrypted ciphertext on-chain so the recipient can discover it.See Creating UTXOs.
Wait for the anonymity set to grow
The more other users deposit into the same tree, the stronger your privacy guarantee. There is no enforced waiting period - this is a trade-off you manage in your application.
Fetch claimable UTXOs
The SDK queries the indexer for all ciphertexts addressed to the caller’s X25519 key, decrypts them locally, and fetches the current Merkle inclusion proofs.See Fetching UTXOs.
Claim the UTXO
Submit a Groth16 ZK proof on-chain proving knowledge of the secret inputs. The nullifier is burned on-chain to prevent double-spending, and the tokens are released to the chosen destination - a public ATA or an encrypted balance.See Claiming UTXOs.
Indexer Requirement
UTXO discovery requires the Umbra indexer. PassindexerApiEndpoint when constructing the client:
getFetchClaimableUtxosFunction will fail. The indexer is not required for creating UTXOs - only for discovering and claiming them.