Private Swaps

Trade from a shielded balance and keep the result shielded.

A shielded balance in Sombra can fund any trade on Solana. Deposit once, buy or sell privately through the protocols already there, and what comes back is a shielded note you can withdraw whenever you want.

The trade itself runs in public, at public prices. What stays private is whose trade it is: your public wallet is never part of it.

Not live yet. Private transfers are what runs on devnet today. There are no dates on this page on purpose.

The three steps

A transfer is one proof and one result. A swap cannot be, because the trade has to run in public, on real tokens, and it can fail. So it splits into three transactions.

A private swap — three transactions1You open the swapYour notes are spent, the value moves to a holding account, and both outcomes are committedYOU2The trade runs in publicThe held funds route through Jupiter, like any other Solana tradeJUPITER3The result is shielded againThe outcome selects one of the two notes you already agreed toPROGRAM
A private swap, end to end. Both outcomes are agreed before any value leaves the pool, so the only question the public trade settles is which of the two you get.

1. Open. Your wallet proves it owns the input notes, exactly as it does for a transfer. The notes are spent and the value moves into a holding account that exists only for this one action. The same step commits to both outcomes — the note you get if the trade fills, and the note you get back if it does not.

2. Execute. The public part. The held funds route through Jupiter, like any other trade on Solana.

3. Settle. The outcome selects one of the two committed notes. It is appended to the tree, the holding account closes, and your balance is shielded again.

If step 2 never happens — a route nobody fills, a protocol that is paused — the action can be reclaimed after a timeout and the refund note is yours.

An example

You hold 100 USDC privately. JUP is around $0.25, so 100 USDC is about 400 JUP. Routes move while you sign, so you accept 398 and walk away below that.

One private swap, with the numbers on itYour shielded notes100 USDCHIDDEN1Holding account100 USDCPUBLIC FOR A MOMENT2JupiterUSDC → JUPPUBLIC3SEALED IN STEP 1, BEFORE ANY VALUE MOVEDIt filled≥ 398 JUPshielded again, yoursIt did not100 USDCback, shielded again, yours
100 USDC into JUP. The only thing the public trade decides is which of the two lines you end up holding.

Opening the swap pins all of it at once:

Pinned when you open itValue
Going in100 USDC
Coming out, at the least398 JUP
If it fillsa note for the JUP, yours
If it does nota note for the 100 USDC, yours

It cannot settle at 390, and it cannot settle at nothing.

Why both outcomes are agreed first

This is the part that makes three separate transactions safe.

Because the two possible notes are fixed before any value leaves the pool, the public trade is only choosing between them. You either receive the amount you accepted, or you get your original token back. There is no partial fill, and nothing settles at a worse price than the one you agreed to.

It also means nothing is left stranded if the middle step fails. Failure is one of the two outcomes, not an error state somebody has to clean up.

What is public while it runs

Public for the windowStill hidden
The amount going inWho you are
Both tokensWhich notes funded it
The protocol you are usingYour balance, before and after
That a swap is happeningEverything after it settles

The window is short, and the value is outside the anonymity set while it is open. One practical note: a fresh swap output has a publicly known amount, so a wallet should merge it with your other notes before you use it for anything sensitive.

One integration reaches a long way

Jupiter is a router, so a single integration reaches any token with liquidity on Solana. That part is obvious. This part is less so: a note holds a fixed amount of a token, and most yield on Solana is already a token whose value grows.

A liquid staking token does not pay you rewards — its exchange rate against SOL rises. A lending receipt does not pay you interest — its price rises. In both cases the balance never changes while the thing you hold becomes worth more, which is exactly what a note can carry.

So one integration produces several products:

What you wantWhat you hold
Trade any token privatelythe token
Stake SOL privatelya liquid staking token
Earn yield on private dollarsa lending receipt or a tokenized treasury
Hold tokenized stocks privatelythe stock token
Hold an index or a commodity privatelythe basket token

Earning is the row worth pausing on. Once the position is a note, nothing happens on chain while it earns. No reward claim, no restake, no compounding transaction. There is nothing for anyone to watch, and your yield is as private as your balance.

Next: Use Cases — what this is worth building on.

On this page