Docs · Devnet

Hollow, explained.

Hollow is a private pool for Solana. You put SOL or USDC in, get a secret note, and later take the money out to a fresh address. Nobody watching the chain can tell which deposit was yours.

Devnet only. Hollow has not been audited. Don't use it with money you can't lose.

How it works

  1. 01

    Shield

    You deposit a fixed amount, such as 1 SOL, into a pool. Your browser makes a random note and sends only a fingerprint of it (the commitment) with the deposit.

  2. 02

    Blend in

    Every deposit in a pool is the same size, so they all look identical. Your deposit sits among everyone else's.

  3. 03

    Prove

    To withdraw, your browser builds a zero-knowledge proof: "I own one of the deposits in this pool." It never says which one.

  4. 04

    Emerge

    A relayer submits the proof and pays the network fee. The money arrives at the address you choose, with no on-chain link back to your deposit.

Your note

A note looks like this:

hollow-sol-1-devnet-0x3f9a…(124 hex characters)

It says which pool it belongs to (asset, amount, cluster) and holds two random secrets. The note is the money. Anyone who has it can withdraw. If you lose it, nobody can get the funds back, including us. Hollow never stores notes on a server.

  • Save it before you deposit. The app won't let you continue until you confirm you have.
  • Keep it somewhere private, like a password manager.
  • Use Check to see whether a note is still unspent without withdrawing it.
  • Or keep notes in the app's vault: they're encrypted with a passphrase and stored only in your browser. Download a backup, because clearing your browser data clears the vault.

Depth

Each note in the vault shows how deep in the crowd it sits: Shallow, In the shadows or Deep in the crowd. It's based on how many people have deposited into the same pool since you, and how long ago you deposited. Deeper is harder to trace.

Hood up

Press Hood up (or the H key) in the app to blur every amount and note on screen, for when someone might be looking over your shoulder.

Shielding

Pools come in fixed sizes so every deposit looks the same.

AssetDevnet poolsNotes
SOL0.1 · 0.5 · 1Sized for the devnet faucet
USDC100 · 1,000 · 10,000Devnet uses a test USDC the app hands out for free

To shield a bigger amount, make several deposits, ideally spread over time.

Withdrawing

Paste your note, enter the address that should receive the money, and withdraw. Your browser reads the pool's deposits, builds the proof (a second or two on a laptop), and hands it to a relayer. You don't need to connect a wallet to withdraw through a relayer.

The recipient, relayer and fee are sealed inside the proof, so nobody can redirect your money in transit. Use a plain wallet address (not a token account). For USDC, the relayer creates the recipient's token account if it doesn't exist yet.

More ways out

Withdraw later

Pick Within 1–6 hours or Within 6–24 hours and your browser builds the proof now. The relayer holds it and sends it at a random moment in that window, so nobody can match the timing to your deposit. You can close the page. The relayer only ever has the finished proof, never your note, and the proof can only pay the address you chose.

Split across several addresses

Choose Split across several, pick two or more notes and give one fresh address per note. Each one goes to its own address, and with a delay each goes out at its own random time. Splitting only works across whole notes, so to split later, shield as several smaller notes to begin with (say, ten 0.1 SOL notes instead of one 1 SOL note).

Swap on the way out

Coming to Solana. A withdrawal will be able to come out as another token in the same transaction, routed through Jupiter with the swap terms sealed in the proof. Until then, withdraw and swap from the fresh address.

Send privately with a link

On the Send tab, pick an amount and create a link. You shield the money from your wallet, and the link (or its QR code) holds the note. Whoever opens it claims the money to any address they like, through a relayer, so they need no SOL. On-chain there is a deposit from you and later a withdrawal to them, with nothing tying the two together.

  • Anyone with the link can claim it, so share it privately, never in a public channel.
  • Until it's claimed, you can take it back from your vault (or with the link, if you kept it).
  • The secret lives after the # in the link, which browsers never send to a server. The app also removes it from the address bar as soon as the link opens.

Relayers and fees

If you withdrew from your own wallet, that wallet would appear on-chain and could be linked to you. A relayer sends the withdrawal for you and pays the network fee and the small rent for the note's spent-marker. In return it takes a fee from the amount withdrawn.

WhatCost
ShieldingNetwork fee only (a fraction of a cent)
Withdrawing through a relayer0.3% of the pool amount (at least about 0.001 SOL, or 1 USDC on USDC pools), taken from the withdrawal
Withdrawing from your own walletNetwork fee and about 0.001 SOL of rent, but your wallet becomes visible

Relayers never see your note. They only see the finished proof.

Staying private

The maths hides which deposit is yours. Your habits can still give you away.

  • Wait. Withdrawing minutes after depositing, when few others have, makes you easy to guess.
  • Use a fresh address that has never touched your other wallets.
  • Pick a busy pool. The app shows how many deposits each pool has. More is better.
  • Don't reconnect the dots by sending the withdrawn funds straight back to your original wallet.

Security

Program

Pools have no owner, no admin keys and no pause. Nobody can freeze or move deposits. The only way out is a valid proof. While on devnet the program can still be upgraded; before mainnet its upgrade authority will be removed.

Proofs

Groth16 proofs over a Poseidon Merkle tree with room for about a million deposits per pool, checked on-chain with Solana's native BN254 and Poseidon syscalls. Each note can be spent exactly once.

Your keys

Notes and proofs are made in your browser. Nothing secret is sent to Hollow or to the relayer.

Not yet done

No audit yet. The proving keys come from a single-party setup, which is fine for devnet. Mainnet needs a public multi-party ceremony.

Program and pools

Reading the deployment…

AccountAddress

FAQ

Is Hollow part of Solana?

No. Hollow is an independent project that runs on Solana. It is not affiliated with, endorsed by or sponsored by the Solana Foundation or Solana Labs.

What if Hollow's website goes down?

Your money is in the on-chain pools, not on our servers. With your note, anyone can rebuild the proof from the open-source code and withdraw.

Can I withdraw part of a deposit?

No. Each note withdraws its full pool amount (minus any relayer fee). Fixed sizes are what make every deposit look alike. To split later, shield as several smaller notes, then use Split across several.

What if a scheduled withdrawal fails?

Your money stays in the pool and your note still works. The app shows the job as failed; withdraw the note again whenever you like.

Can I shield other tokens?

Not yet. Some Solana tokens carry freeze authorities or transfer hooks that could trap funds in a pool, so Hollow starts with SOL and USDC.

How long does a scheduled proof stay valid?

A proof is tied to the pool's state when you built it, and the pool remembers its last 1,024 states. If more than 1,024 deposits land in the same pool before the relayer sends it, the job fails, your money stays put, and you can withdraw again.

Why does the first withdrawal take a few seconds?

Your browser downloads the proving files (about 7 MB) the first time, then builds the proof locally. After that it's quicker.