Live on Solana devnet

Private Balance

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.

The bank vault, in plain English

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.

What's hidden, what's not

Hidden
  • • How much USDC each note holds
  • • Who owns each note
  • • Which notes were the input of a transfer
  • • Which notes are the output of a transfer
  • • The graph of who-paid-whom
  • • 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.