How it works
Funding and exit
How value gets in without a separate exposed deposit step, and exactly what leaving publishes.
The ordinary way to fund a privacy pool from another chain is two moves: bridge to a public Starknet address, then deposit. The public address sits in the middle holding your money, and both legs are attributable to you.
Sealed's inbound lane uses Circle's CCTP V2 from Base Sepolia and claims and shields in the same flow, so the arriving USDC does not idle at a public address waiting for a second transaction you might forget to send.
What the inbound lane does not hide
CCTP burns on Base and mints on Starknet. Both of those are public events on public chains. Anyone watching can see that an amount crossed and roughly when.
Going out
Unshielding sends to a public address. The destination and the amount are visible, because that is the definition of the public leg. The pool fee is charged in public STRK on top, so the app warns before an unshield when your public STRK cannot cover it - a warning added after that exact failure happened live.
Unshielding MAX spends the whole note rather than a chosen slice, which follows from how notes work rather than from any policy decision here.
A separate public CCTP hop out to Base or Solana exists from native Starknet USDC. It is public by construction and labelled that way in the app.
Each route, and what it publishes
| Route | Public | Private |
|---|---|---|
| CCTP in from Base | The burn on Base and the mint on Starknet | What you subsequently hold, once it is shielded |
| Direct shield | Your address, token and amount on the deposit leg | Everything after it |
| Unshield out | Destination address, amount, and the STRK fee | Which notes funded it |
| CCTP hop out | Entirely public, by design and by label | not applicable |