Send USDT privately on Solana

Tether · 6 decimals

USDT on Solana exists primarily for users whose downstream rails (centralised exchanges, OTC desks, certain regional fiat off-ramps) settle in Tether rather than USDC. The SolMask USDT pool accepts the canonical SPL-token USDT mint and operates identically to the USDC pool: per-asset vault, free deposits, a 23 bps withdraw fee taken in USDT plus a 0.003 SOL flat withdraw fee, no conversion, no wrapping. If your sender holds USDT and the receiver wants USDT, this pool is the route — using the USDC pool with an external swap on either end leaks the swap event publicly, which defeats the purpose. SolMask ships USDT and USDC as separate pools, not as a unified "stablecoin" pool, because mixing them at the protocol layer would force a synthetic 1:1 peg the protocol has no business enforcing. Each pool stands on its own merits and its own anonymity set; users pick the one whose downstream rails match their need.

How to send USDT privately

  1. 01

    Deposit USDT

    Open the SolMask app, switch to the Deposit tab, and pick USDT. 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 USDT Merkle tree, and publishes a wallet-encrypted recovery blob on-chain so the same wallet can rediscover the note on any device.

  2. 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 USDT deposit in the same window becomes a plausible source for your eventual withdraw.

  3. 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.

  4. 04

    Withdraw arrives

    The relayer signs and submits the withdraw transaction. The recipient's address receives USDT 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 USDT

Deposit fee: none. Deposits are free — a 1,000 USDT deposit mints a note worth the full 1,000 USDT.

Withdraw percentage fee: 23 bps (0.23%) of the withdrawn amount, taken in USDT 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 USDT you deposit is the same USDT 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
Es9vMFenwNYB
Decimals
6
Withdraw fee
23 bps + 0.003 SOL
Withdraw fee
0.003 SOL
Open the USDT pool

FAQ

Does the recipient need SOL to receive their USDT?
No. The withdraw delivers USDT 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 USDT.
How long do I have to wait between depositing and withdrawing USDT?
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 USDT I receive the same USDT I deposited?
Functionally yes — it is the same canonical USDT mint, fully fungible with any other USDT 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 USDT 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.
Send USDT privately on Solana · SolMask