voidcashdocs

Staying private

Practical habits that keep your voidcash activity private, and the limits the protocol cannot remove for you.

The cryptography hides balances, amounts, senders and recipients inside the voidcash vault. Where HYPE comes in or goes out (shields and unshields) the chain shows public data, and your privacy then depends on your habits and on how many other people use voidcash.

Protect the activation signature

Sign it only on voidcash.io

The activation message names the domain it is for, and ends with "Sign it only on voidcash.io". Whoever gets that signature can derive your viewing key and see every note you own, past and future. If a site on any other domain asks you to sign it, refuse. Most wallets warn when a Sign-In with Ethereum message names a domain different from the site asking. The same goes for the second message that opens your payment links.

That signature cannot move your funds: every private action needs a separate Spend confirmation from your wallet. So:

  • confirm a Spend request only right after you started a send, an unshield, a payment link or a collection yourself;
  • if a Spend prompt appears when you did nothing, reject it.

The app keeps your keys in memory only. Its content security policy lets the page talk only to the chain's RPC, the voidcash bundler and indexer, and WalletConnect's relay and Verify API. The files the prover needs are served by the app itself.

Leave through fresh addresses

  • Unshield to a fresh address that has never touched your identity. The Unshield form starts empty for this reason: an exit back to the wallet that shielded links the two in public.
  • Never unshield to an address linked to your identity, such as one you used on an exchange with your name, if you care about privacy. The receiving address and the amount are public.
  • Pay inside the pool when you can. A private send, or a payment to a private address from your private balance, never reaches a public edge, so there is nothing for an observer to match. A payment link stays inside too when it is claimed into a private balance.

Vary timing and amounts

An observer's easiest tool is matching what went in with what came out.

HabitWhy
Wait between shielding and unshieldingAn unshield minutes after a shield is easy to pair with it
Avoid unshielding the exact amount you shieldedEqual amounts stand out, even among many transactions
Split large amounts, at different timesOne large exit is easier to tie to one large entry
Keep part of your balance privateNotes that stay in the tree make everyone's set larger

The whitepaper puts numbers on this. With an illustrative 10 shields per hour, an observer who knows only that your HYPE stayed in the pool for at most a given time picks the right shield with this probability:

Time in the poolSame amount out as inVaried amount
10 minutes99%79%
1 hour95%32%
1 day38%1.4%
1 week6%0.2%

Any other clue (habits, repeated counterparties, network data) makes the observer's odds better, so read these as a floor. See the whitepaper.

Know the limits

The privacy set is small early on

A proof hides which notes you spend among all the notes in the tree. Early on there are few, so amounts and timing narrow the search much more, and the earliest users should wait the longest. See Key concepts.

Tokens have a smaller crowd

A proof hides which notes you spend among every note in the tree, of any asset. But the public edges name the asset: a shield of a token shows the token and the amount, and so does an exit of it. VOID that leaves can only be VOID that was shielded, so an observer matching entries and exits of VOID compares them only with other VOID shields and exits. In practice, a token's privacy set is the notes of that token, and fewer people hold a token privately than HYPE. The habits above matter more for it: wait longer, and vary the amounts.

A private send of a token does not show the token, the amount or the parties. Its gas comes from a separate HYPE note, and so does the gas of a private HYPE send whenever the wallet holds a HYPE note to spare: the two look the same on-chain. A HYPE send from a wallet with a single private HYPE note pays its gas out of that note instead, and shows that it moved HYPE. Keeping two or more private HYPE notes, as most wallets do after a few operations, keeps your HYPE sends in the same crowd as token sends.

New notes are recognisable, spending them is not

When you shield, the transaction is public: anyone can see which address it came from, the amount and, for a token, which token.

What nobody can see is when, or whether, that note is spent. A spend reveals only a nullifier, which needs your nullifier key to compute and cannot be linked back to the note. See Notes.

Exits are public

An unshield shows the receiving address, the asset, the amount it receives, the exit fee and the gas. An exit above the vault's large-exit threshold (or, for a token, above its 24-hour cap) also waits 24 hours in public view before it is paid.

Your network connection is visible

Your browser talks to an RPC node, the voidcash indexer and the voidcash bundler, and a phone wallet connects through WalletConnect's relay. None of them learns your keys, and the indexer serves the same data to everyone. But each can see your IP address and when you connect, and the timing of a request can hint at the operation that follows. Elysium has no public bundler today, so every private action goes through the voidcash bundler, which sees the network address behind it. The app scans for your notes when you turn on privacy, after each action and when you refresh, not at random times; the wallet page also reads the public pool figures every 15 seconds.

If that matters to you, use a VPN or Tor.

Gas settings

Each private action pays a gas fee that is public. The app uses the same default gas limits for everyone, at the bundler's current price, so your fee does not single you out. A client with unusual gas settings would stand out.

Registration and public actions are public

The key registry is a public list of addresses that use voidcash. Every registration and shield you send from your own wallet is visible, and so is a payment to a private address made with public HYPE. They reveal what you put in, not what you do with it next.

Checklist

  • The activation message names voidcash.io.
  • Each Spend prompt matches an action you just started.
  • Unshields go to fresh addresses, not the one the form fills in.
  • Amounts and timing of unshields differ from your shields.
  • Payments stay inside the pool when you can.
  • Tokens stay in the pool longer than HYPE would, since fewer people hold them privately.
  • A VPN or Tor if your IP address matters.

See also the trust model and the threat model.

On this page