Hold and send USDC without anyone reading the amount or the counterparty on chain.
Open the wallet at /app/private, top up a dollar of USDC, and from that moment your balance is invisible to anyone reading the chain. You can pay another user out of that balance and Solscan will record “two notes were spent and two new ones were created” — no amount, no sender, no recipient.
Imagine a bank vault on Solana. Anyone can register an account by generating a key on their own device — no ID, no signup, no fee. From that moment, anyone can send you USDC into the vault, and you can send USDC out of it.
Inside the vault are thousands of sealed drawers. Each drawer holds some USDC, addressed to someone — but you can't tell from the outside how much or whose. When you want to pay someone, you walk in, open two of your drawers, take their contents, and reseal everything into two new drawers — one for the recipient, one for your change. From outside, every transfer looks identical: “someone opened two drawers and sealed two new ones.”
The counterintuitive part: privacy doesn't come from being alone in the vault. It comes from being one of a crowd. The vault is dark, dozens of people are inside wearing identical masks, and your transfer hides in theirs. The more users, the better your privacy gets.
For the full version of the metaphor + the cryptographic mapping (drawer → commitment leaf, mask → anonymity set, etc.), see the explainer blog post.
What you get
Hidden amounts
Every balance and every transfer amount is inside a cryptographic commitment, not in plain bytes on chain. Solscan shows “activity happened” — never how much.
Persistent private balance
Unlike one-shot shielded links, your private balance survives between sessions. Top up once, spend a dozen times over the next month, withdraw the rest.
No SOL needed
RelAI's sponsored fee-payer covers the SOL gas on every private operation. You hold zero SOL and still deposit, send, and withdraw.
Send to anyone with a Payment Address
Recipients register once. After that, you send by their friendly Payment Address — no copy-paste of long hex strings, no separate setup per transfer.
How to use it
Four steps, end-to-end. The whole flow takes under a minute on a typical connection.
1
Connect your Solana wallet
Phantom, Solflare, Backpack — anything that supports signMessage. The wallet stays in control of your keys; RelAI never sees them.
2
Generate your Payment Address
One signature on a fixed challenge message creates the keys that decrypt your private balance. The keys are cached locally so future visits skip this step.
3
Top up with USDC
Enter an amount, hit Deposit. Your USDC moves from your wallet into the pool and lands as private notes in your balance. ~10 seconds end-to-end.
4
Send or withdraw
Paste a Payment Address (or a registered wallet pubkey) and send — recipient gets a note they can spend. Or withdraw to any public Solana address and the funds appear back in normal USDC.
One-time wallet popup at signature time: Phantom will say “Confirm (unsafe)” — that's normal for ZK programs (the wallet's preflight simulator can't decode the raw Groth16 verifier's bytecode). The transaction is still safe to confirm; the proof verification runs on chain regardless.
Private codes & gift cards
On top of wallet-to-wallet private transfers, Private Balance lets you turn USDC into a bearer code — a string the receiver redeems to any wallet without ever holding a private balance themselves, signing a wallet message, or being a registered recipient. Think of it as cash you can mail: whoever has the string has the money.
Under the hood the issuer parks a note in a separate credit-pool tree under keys derived from a random seed. The seed becomes the code. The receiver re-derives the same keys from the string and cashes the note out to whatever wallet they choose — the on-chain cash-out transaction looks identical regardless of which code unlocked it, so the receiver address is never linked to the issuer.
Private payment code (long)
~44-character base58 string. Highest entropy (256-bit) — uncrackable by brute force. Best when you can share via a URL or QR (paste the redeem link, scan the QR), since the string is too long to dictate by phone.
3kQy8ZHJaqXz92mvjPxV5fdwBcLG7TtnE6sUYrAjLp2N
Private gift card (short)
19-character Wi-Fi-style code with dashes — 80-bit entropy, dictatable over the phone or printed on a voucher. Lower entropy than the long form, so use it for smaller amounts (gift-card-sized) where dictation matters more than maximum security.
AIHR-7BXJ-MYDL-AYOU
How issuance works
1
Pick a format
In /app/send choose Private payment code or Private gift card — the only difference is short vs long encoding.
2
Park the value
You sign one transaction that moves the amount from your private balance into the credit-pool tree under code-derived keys. The seed becomes the code string.
3
Share the code
Copy the redeem URL (long codes) or hand over the XXXX-XXXX-XXXX-XXXX (short / gift). The receiver doesn't need a relationship with you to claim.
4
Receiver redeems
They open the redeem link or paste the code at /codes/redeem-private, type any wallet address as the payout target, and the RelAI relayer settles USDC there. No wallet signature on the receiver side, no SOL gas needed.
Cancel before redemption
The seed is yours too — you can cash the code out to your own wallet at any time before the receiver does. First spend wins. The My Codes view in /app/codes shows every code you've issued and lets you cancel-by-cashing-out in one click.
Bearer = cash discipline
Anyone who reads the code can redeem. Treat short codes like a hotel key card: fine for the amounts you'd carry as cash, but don't email a $10k gift card. For high-value transfers use the long code over an encrypted channel — or send wallet-to-wallet directly out of your private balance.
Gift-card mode also renders a downloadable PNG voucher (Solana template, dashed code in big mono, amount in USDC) so you can print or share an image. Useful for events, retail, promo drops — anywhere “here's a code” needs to look like a physical thing.
• Your total private balance from an outside observer
Visible to anyone
• The pool itself (the on-chain program)
• Every note's existence (as an opaque hash)
• That “a transfer happened” (just the event, not the parties)
• Total USDC ever deposited into the pool
• Protocol fee on each transfer (5%)
One subtle gotcha: when you deposit from a regular Solana wallet, that wallet's public address signs the deposit transaction — so on chain it's visible that “wallet X deposited some amount into the pool.” What stays hidden is how much and where it goes from there. For end-to-end privacy, top up from a separate wallet that doesn't have your public identity on it.
Fees
0%
Deposit
No fee on topping up your private balance.
5%
Private send
Flat protocol fee on internal transfers — paid in pool USDC, never blocks the transaction.
0%
Exact withdraw
Cashing out a single full note to a public address has no protocol fee — same as deposit.
SOL gas (network fee) is sponsored by RelAI on every private operation. You never need SOL to spend.
Common questions
Is this audited?+
We're live on Solana devnet for testing. A multi-party trusted-setup ceremony and an independent ZK audit are queued before mainnet. Until then, treat balances as test funds.
What happens if I lose my keys?+
Your keys are derived from a wallet signature on a fixed challenge message. As long as you still control the same Solana wallet, you can re-derive the same keys by signing again. We never have a copy — there's nothing for us to lose or leak, but also nothing for us to recover if your wallet itself is gone.
Can RelAI freeze my balance?+
No. The pool is a smart contract; no human at RelAI can move funds inside it. The Approved Set Provider (ASP) layer can decide that a specific deposit shouldn't be spendable — but that's a compliance gate at deposit time, not a freeze on existing balances. See the ASP ruleset for the data sources and thresholds that drive that decision.
How long do private notes last?+
Indefinitely. Your private balance is yours until you spend or withdraw it. Notes don't expire, don't decay, don't get rolled.
Can I use this for invoices / merchant checkout?+
Yes — pair it with Payment Codes for codes that settle into a private balance, or use the public-key registry so a merchant can send you a Payment Address that resolves to your private wallet without an off-chain handshake.
What about EVM (Base, Ethereum)?+
EVM parity is designed but not yet built. The current production path is Solana-only. The blog post covers the timeline.
Can someone send me USDC without me being online?+
Yes. Once your Payment Address is registered, anyone can send to it whether you're online or not. The funds wait in the pool as private notes you discover next time you open the wallet.
Try it on devnet
Open the wallet, top up a test dollar, and send some USDC privately between two of your own addresses. Watch the transaction on Solscan — nothing on the page will tell you what moved, or to whom.