Overview
Each Umbra pool is deployed per token mint. A pool supports both the EncryptedTokenAccount flow (deposit / withdraw / convert) and the Stealth Pool flow (Stealth Pool Note create + burn).
Token-2022 mints with a transfer fee extension are fully supported — the SDK accounts for the transfer fee before applying protocol fees. See Token-2022 Support.
The list below is a snapshot. The authoritative source at runtime is the relayer’s getSupportedMints() endpoint — it returns only mints with deployed token-pool and fee-schedule PDAs, so it doubles as a “pool deployed” check.
import { getUmbraRelayer } from "@umbra-privacy/sdk";
const relayer = getUmbraRelayer({ apiEndpoint: "https://relayer.api.umbraprivacy.com" });
const live = await relayer.getSupportedMints();
Mainnet
-
wSOL (Wrapped SOL)
- Mint:
So11111111111111111111111111111111111111112
- Decimals: 9
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
USDC
- Mint:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
- Decimals: 6
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
USDT
- Mint:
Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
- Decimals: 6
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
UMBRA
- Mint:
PRVT6TB7uss3FrUd2D9xs2zqDBsa3GbMJMwCQsgmeta
- Decimals: 6
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
CASH
- Mint:
CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH
- Decimals: 6
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
ZINC
- Mint:
zinc155BS4mSPk8GXQj4R5hkVDQXcW253pTYq5SGyfi
- Decimals: 9
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
Devnet
-
wSOL (Wrapped SOL)
- Mint:
So11111111111111111111111111111111111111112
- Decimals: 9
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
dUSDC (Dummy USDC — mock of the USD Coin standard)
- Mint:
4oG4sjmopf5MzvTHLE8rpVJ2uyczxfsw2K84SUTpNDx7
- Decimals: 6
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
-
dUSDT (Dummy USDT — mock of Tether USD)
- Mint:
DXQwBNGgyQ2BzGWxEriJPVmXYFQBsQbXvfvfSNTaJkL6
- Decimals: 6
- Token program: SPL
- EncryptedTokenAccount: enabled
- Stealth Pool: enabled
Mints outside this list will fail at the account-fetch stage with error 3012 (pool missing).
Devnet Faucet
Get test tokens at faucet.umbraprivacy.com. The faucet distributes 1,000 tokens per wallet every 60 minutes for each of dUSDC and dUSDT — no signup, no KYC, just paste a Solana devnet wallet address. For devnet wSOL, use any standard Solana airdrop faucet (e.g. solana airdrop) and wrap it with the SDK.
Localnet
Localnet uses the same configuration as devnet — wSOL only — and runs against a local Solana validator + a locally-spun-up indexer/relayer stack.
Using a Supported Mint
Pass the mint address directly to any SDK function that accepts a mint parameter:
import { getATAIntoETADirectDepositorFunction } from "@umbra-privacy/sdk/deposit";
import { getETAIntoATAWithdrawerFunction } from "@umbra-privacy/sdk/withdrawal";
const USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
// Deposit: ATA → ETA
const deposit = getATAIntoETADirectDepositorFunction({ client });
await deposit(client.signer.address, USDC, 1_000_000n);
// Withdraw: ETA → ATA
const withdraw = getETAIntoATAWithdrawerFunction({ client });
await withdraw(client.signer.address, USDC, 1_000_000n);
The SDK fetches the pool configuration on-chain and selects the correct instruction variant automatically.
Always verify the mint is supported before building a transaction. Use relayer.getSupportedMints() at app boot and cache the result for the session. Calling a deposit / withdraw / create with an unsupported mint fails with error 3012 after the account-fetch stage — surface a clear user-facing error before you get there.