Send USDC privately on Solana
USD Coin · 6 decimals
USDC is the workhorse stablecoin on Solana and the most commonly requested SolMask pool by a wide margin. The use case writes itself: payroll, contractor payments, settlement between counterparties who don't want their treasury wallet on the other party's address-book. SolMask's USDC pool accepts the canonical Circle-issued USDC mint, holds it 1:1 in a per-asset vault, and pays out the same canonical USDC to the recipient. There is no wrapping, no rebasing, no on-chain conversion — the USDC that lands at the recipient is the same USDC that was deposited, identifiable on every block explorer as plain Circle USDC. Deposits are free — the full USDC amount enters the pool. The protocol fee is charged at withdraw time: a 23 bps fee taken in USDC plus a flat 0.003 SOL fee paid by the protocol's withdraw fee mechanism (the recipient does not need SOL on hand to receive). For business users moving large USDC volumes, the flat withdraw fee amortises essentially to zero against the size of the transfer.
How to send USDC privately
- 01
Deposit USDC
Open the SolMask app, switch to the Deposit tab, and pick USDC. Enter the amount, choose a privacy delay, and sign. Your note secrets are derived from your wallet — no passphrase to choose, no file to save. The deposit is free — the full amount enters the pool — and mints a Poseidon commitment into the USDC Merkle tree, and publishes a wallet-encrypted recovery blob on-chain so the same wallet can rediscover the note on any device.
- 02
Wait for the unlock slot
The unlock slot is set at deposit time. Until that slot passes, the note cannot be spent. The waiting period is what grows the anonymity set — every other USDC deposit in the same window becomes a plausible source for your eventual withdraw.
- 03
Reconnect and choose a recipient
Switch to the Send tab and connect the same wallet you deposited with. SolMask re-derives your notes and recovers your balance from the on-chain blobs automatically — nothing to upload. Paste the recipient address; the browser generates the Groth16 withdraw proof locally, and your secrets never leave the device.
- 04
Withdraw arrives
The relayer signs and submits the withdraw transaction. The recipient's address receives USDC from the vault, with no on-chain edge to the depositing address. The on-chain footprint is one anonymous withdraw alongside every other withdraw in the same block.
Fees for USDC
Deposit fee: none. Deposits are free — a 1,000 USDC deposit mints a note worth the full 1,000 USDC.
Withdraw percentage fee: 23 bps (0.23%) of the withdrawn amount, taken in USDC at withdraw time and accrued to the pool's token fee vault. Admin-tunable on-chain (capped at 1.00%).
Withdraw flat fee: 0.003 SOL per recipient, charged by the protocol at withdraw time. This is what funds the on-chain Groth16 verifier compute and the relayer's submission cost — the relayer signs and submits the transaction, but the fee covers it; the relayer does not subsidise the gas. For multi-recipient sends the fee scales linearly: 5 recipients = 0.015 SOL.
No spread, no slippage. The USDC you deposit is the same USDC that comes out at the other side (less the withdraw fee). There is no AMM, no oracle, no liquidity provider to compensate.
Pool details
- Mint
- EPjFWd…yTDt1v
- Decimals
- 6
- Withdraw fee
- 23 bps + 0.003 SOL
- Withdraw fee
- 0.003 SOL
FAQ
- Does the recipient need SOL to receive their USDC?
- No. The withdraw delivers USDC directly to the recipient's associated token account, creating it idempotently if it doesn't exist yet. The 0.003 SOL withdraw fee is paid by the protocol — the recipient does not need to hold any SOL to receive USDC.
- How long do I have to wait between depositing and withdrawing USDC?
- You pick the unlock slot at deposit time. The minimum is the current slot (effectively instant), but the longer you wait, the larger the anonymity set your withdraw blends into. The recommendation for sensitive transfers is at least several hours, ideally a day or more, so your withdraw is statistically indistinguishable from any other note unlocked in the same window.
- Is the USDC I receive the same USDC I deposited?
- Functionally yes — it is the same canonical USDC mint, fully fungible with any other USDC on Solana. The specific tokens come from the per-asset vault, not from your particular deposit, which is what breaks the on-chain link.
- What is the maximum USDC I can send privately?
- There is no per-transaction cap. The practical limit is the pool's anonymity set — if you withdraw an unusually large amount that has no comparable peer deposit in the same epoch, the size itself becomes an identifying signal. For very large transfers the recommended approach is to split into peer-comparable amounts across multiple recipients, which the Send tab supports.