Introduction
Every transaction on Solana is publicly readable: addresses, balances, and transfer history are visible to anyone. For Solana Privacy Rings, we define two levels of privacy:- Confidentiality – encrypts the asset and amount
- Anonymity – encrypts the asset, amount, the sender and recipient
Solana Privacy Rings
Rings are a programmable shielded pool with encrypted onchain balances and execution directly on Solana. Different kind of Rings co-exist:Default Ring
- Confidential
- Self-custodial
- Permissionless
- No auditor visibility
Custom Enterprise Rings
- Confidential or anonymous
- Self-custodial
- Custom compliance
- Auditor visibility

Key Properties
- Native Solana speed – succinct are generated in tens of ms, preserving a familiar user experience. Think of it like another RPC call.
- Onchain execution – Encrypted balances stay on Solana. No offchain ledger, sidechain, or centralized sequencer.
- Encrypt any asset – Rings support SOL, SPL tokens, and Token-2022 tokens.
- Self-custodial balances – Private transactions always require the owners signature.
- Smart account compatibility – Rings can support smart accounts with their own authorization logic.
- Solana composability – compose with any Solana program in a single transaction.
- Programmable privacy – Create private escrows in Solana programs.
User Flows and Privacy Guarantees
Users hold their encrypted balance in a Private Wallet. They can enter, transfer privately within, or exit from a Ring and compose with other Solana programs in a single transaction.Deposit to a Private Balance
Users can deposit to a private balance in two ways:- On-ramp from a fiat balance to a private crypto balance
- Deposit from a public to a private crypto balance
- On-ramp from fiat balance
- Deposit from public crypto balance
Unlike depositing from a public balance, on-ramping to a private balance keeps the asset and amount private. The provider transfers from its private wallet to yours. In a confidential Ring, only the sender and recipient addresses are public.
Transfer between Private Balances
Users can send a private transfer in two ways:- Transfer in the same Ring
- Transfer to a different Ring
- Default Ring
- Custom Rings
Withdraw to a Public Balance
Users can withdraw from a private balance in two ways:- Off-ramp from private crypto to a fiat balance
- Withdraw from private crypto to a public crypto balance
- Off-ramp to fiat balance
- Withdraw to public crypto balance
Unlike withdrawing to a public balance, off-ramping from a private balance keeps the asset and amount private. You transfer from your private wallet to the provider’s private wallet, and the provider pays you in fiat. In a confidential Ring, only the sender and recipient addresses are public. Your remaining private balance stays private.
Programmability and Private Escrows
Solana programs can use private escrows to build confidential DeFi applications.- Private escrows – ZK Solana programs can escrow private balances and define the conditions for release
- Solana Composability – Combine private transactions with other Solana programs in a single transaction
- Shared liquidity – ZK programs across confidential DeFi can share liquidity
- Conditional private payments – Escrow encrypted assets and release them on a schedule or after required approvals, enabling payroll, vesting, milestone payments, and private multisig workflows.
- Swaps and Trading – exchange wrapped tokens, SOL, memecoins, stocks, and RWAs through private escrows, such as in token swaps or OTC trades.
- Staking and Yield – build private yield bearing applications, such as staking pools, tokenized treasuries, or other yield vaults.
- Lending and Borrowing – hold collateral in private escrows, such as for stablecoin loans backed by tokenized assets.
High-Level Transaction Flow
A private transfer behaves similarly to public transfers and is executed in a single Solana transaction.- Private transfer
- Solana transfer
- The user’s SOL or SPL balance is encrypted onchain.
- Fetch encrypted state and decrypt locally, or a delegated provider decrypts and serves decrypted state.
- The wallet sets amount and recipient, then requests a ZK proof.
- The RPC provider generates the ZK proof by default and returns it. A Custom Ring also requires a policy proof.
- The wallet builds the Solana transaction. ZK proofs are verified without revealing the encrypted state. The invoked programs and who signs and submits depend on the Ring:
- The app tracks status via the Solana transaction hash.
- Permissionless Confidential Ring
- Custom Confidential Ring
- Custom Anonymous Ring
Learn More
Architecture
How wallets, RPC services, and Solana programs interact.
Private State and UTXOs
How private balances are stored and spent.
Encryption and Privacy Guarantees
How assets are encrypted and the role of the shielded keypair.
Custom Enterprise Rings
How to configure a custom Ring with auditor and compliance controls.