How it works
Five stages, and what each one costs you.
A confidential balance is not a different kind of wallet. It is your own token account with one field encrypted, and these are the five steps that put it there and take it back out.

- 01
Connect
Connect your Solana wallet.
Phantom, Solflare or Backpack, on devnet. VERX reads your address and nothing else.
- 02
Unlock
Sign a message to derive your confidential keys locally.
One signature over 18 fixed bytes, in your browser. It is never stored, so a reload asks again.
- 03
Shield
Move supported Token-2022 assets into your confidential balance.
One transaction. The deposit amount is visible; everything that happens to it afterwards is not.
- 04
Send
Transfer tokens while keeping supported transaction amounts confidential.
Five transactions, five approvals. The amount is encrypted and proven in range. Both addresses stay public.
- 05
Withdraw
Move tokens back into your public balance.
Four transactions. The amount becomes visible again, which is the whole purpose of the step.
stage 1 of 5
Stage by stage
Who does what, and what the chain sees.
The third and fourth columns are the ones worth reading twice: what leaves your browser, and what anybody can read afterwards.
- 01
Connect wallet
One connection prompt, no signature.you
Pick a wallet and approve the connection.
your browser
Reads your address. Nothing is derived and nothing is read from the chain until you ask.
reaches solana
Nothing. A connection is not a transaction.
stays public
Your address, to this page only.
- 02
Unlock vault
One signature.you
Sign one message. It says solana-conf-bal/v1 and nothing else.
your browser
Derives your ElGamal keypair and AES key from that signature, in memory. Nothing is stored, so a reload asks again.
reaches solana
Nothing. A message signature never touches the chain.
stays public
Nothing new. This step is invisible from outside your browser.
- 03
Shield assets
One.you
Type an amount and approve one transaction.
your browser
Builds a deposit instruction. No proof is needed: a deposit moves a plain amount into an encrypted one.
reaches solana
One transaction.
stays public
The deposit AND its amount. What becomes private is everything that happens to it afterwards.
- 04
Confidential send
5, one per transaction.you
Enter a recipient and an amount, then approve each transaction.
your browser
Generates the equality, validity and range proofs from your keys. This is the slow part, and it happens in the tab.
reaches solana
5 transactions carrying 9 signatures.
stays public
Both token accounts, the fee payer and the slot. The amount is a ciphertext.
- 05
Withdraw
4, one per transaction.you
Enter an amount and approve each transaction.
your browser
Generates an equality proof and a range proof, again from your keys.
reaches solana
4 transactions carrying 7 signatures.
stays public
The withdrawal and its amount: this is the step that makes a balance readable again.
Why these numbers
Counted, not estimated.
Every transaction count above comes from a plan this repository built and sent on devnet. A browser drove the whole sequence and the chain was read back afterwards: 10 signatures, verified at slot 511,962,211.
a confidential send
5 transactions · 5 approvals
a withdrawal
4 transactions · 4 approvals
a shield
1 transaction · 1 approval
unlocking the vault
0 transactions · 1 signature
verified against ZkE1Gama1Pro…, which is part of the validator