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.

What stays public

  1. 01

    Connect

    Connect your Solana wallet.

    Phantom, Solflare or Backpack, on devnet. VERX reads your address and nothing else.

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

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

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

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

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

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

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

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

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

How the proofs get there

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

Try it on devnet.

Nothing here needs real funds, and nothing here is deployed to mainnet.

Launch VERX