All posts
2026-05-30

Private OTC trades on Solana: settling without broadcasting your size

The whole point of trading OTC is to move size without moving the market — and then the on-chain settlement broadcasts the size anyway. Desks and funds go off-exchange precisely to avoid signaling. But the final settlement transfer is a public Solana transaction: it names both counterparties' wallets, the exact amount, and the moment it happened. Anyone watching can see that a particular wallet just received a large block, infer the trade, and front-run your next move or simply map your book. The discretion you bought by going OTC evaporates at the settlement step.

This post is about closing that gap — settling OTC blocks on Solana without publishing a roadmap to your position.

What a public settlement gives away

A plain settlement transfer hands an observer four things at once:

  • Your counterparty. The two wallets are now linked on-chain. If either is attributable — a known desk, a labeled fund wallet, an address that's touched an exchange — the relationship is exposed.
  • Your size. The exact block trades hands in the clear. For a fund accumulating or unwinding a position, the size is the signal.
  • Your timing. When you settled, and therefore roughly when you executed.
  • A thread to pull. From the receiving wallet, an observer can watch where the block goes next — into a DEX, into staking, split across wallets — and reconstruct your strategy.

Hiding only the amount wouldn't save you: the counterparty link and the timing are still public, and those alone let a watcher map relationships and infer size from surrounding activity. The thing that actually has to disappear is the edge between the two wallets — see /blog/encrypted-amounts-are-not-private.

Settling through a shielded pool

The fix is to make the settlement a withdraw from a shared pool rather than a direct transfer. The paying side deposits into the shielded pool; the settlement is delivered to the counterparty as a withdraw using a zero-knowledge proof. On-chain there's a deposit from one wallet and an unrelated withdraw arriving at another — no edge tying the two desks together, no public "Desk A paid Desk B exactly X at time T." /learn/what-is-a-shielded-pool is the mechanism; /glossary/relayer explains why the recipient doesn't even need gas to receive.

What this buys a trading operation specifically:

  • Counterparty unlinkability. The two wallets are never connected by a settlement edge.
  • Size discretion. Combined with amount hygiene (below), the block size isn't a clean, isolated signal.
  • Asset flexibility. Settle in the asset the deal calls for. If the trade is priced in USDC but funded in SOL, convert inside the withdraw rather than doing a public swap afterward — /blog/swapping-sol-to-usdc-privately.

Discipline that matters more at size

OTC blocks are large, which makes the usual hygiene from /blog/solana-wallet-privacy-checklist more important, not less:

Don't be an amount outlier. A 50,000 SOL withdraw from a pool whose typical note is 50 SOL points straight at the one deposit that could have funded it. Size is exactly where the anonymity set collapses if you're careless — /blog/anonymity-sets-on-solana works through why. For large settlements, splitting into several rounded sub-settlements across time is often the difference between blending in and standing out alone.

Use the delay deliberately. A deposit and a settlement clustered in the same minute correlate on timing regardless of the proof. Maturing the deposit in the pool, and spacing settlement from execution, is part of the discretion you're paying for. /blog/the-privacy-delay-explained.

Fresh settlement addresses. A counterparty wallet with prior attributable history re-links the trade no matter how clean the pool leg was. /learn/choosing-a-recipient-address.

Mind the post-settlement thread. If the received block immediately moves into a recognizable strategy, the inference resumes downstream. Treat the settlement address as a clean starting point, not a hop on the way to your usual wallet.

The limits, plainly

A shielded pool removes the on-chain edge; it does not erase information your counterparty already has, and it doesn't help if size is so distinctive that elimination identifies you anyway. A nation-state-grade observer with off-chain data, or a settlement so large it has no peers in the pool, is past what any public anonymity set can do alone. /learn/what-solmask-cannot-protect-you-from and /docs/threat-model are the honest boundaries.

For most desk-level discretion — not letting the open market read your counterparties, your timing, and your size off an explorer — settling through the pool with sensible sizing is exactly the tool. Start at /swap.

FAQ

Q. Doesn't going OTC already keep my trade private? A. It keeps the negotiation and execution off-exchange, but the on-chain settlement transfer is public — counterparty, amount, and timing in the clear. Private settlement closes the step OTC alone doesn't cover.

Q. How do I settle a block too large to blend in? A. Split it into rounded sub-settlements spaced over time, so no single withdraw is the obvious match for one deposit. An isolated outlier amount is where size discretion fails.

Q. Can I settle in USDC if I funded in SOL? A. Yes — convert inside the withdraw so there's no separate, correlatable swap. See /blog/swapping-sol-to-usdc-privately.

Q. Does the counterparty need SOL to receive the settlement? A. No. The relayer broadcasts and pays the network fee, so the settlement address needs no gas — which also means neither side has to fund it from an attributable wallet.

Private OTC trades on Solana: settling without broadcasting your size · SolMask