Skip to content
Explainers

What's public and what's private

The edges of the pool are public, and the path between them is private. Here is what each payment shows.

A normal SPL transfer shows everything: the sender, the recipient, the token and the amount. With Nimbus, the way in and the way out still look like that. Everything in between is private.

What each payment shows

These cards show what anyone reading Solana can see, and what stays private.

Register
Anyone can see
  • Your user's wallet, which pays the fee
  • Their platform wallet, which signs
  • Their identity, now tied to both wallets
  • A hash of their encryption key
Stays private
  • Their keys
Deposit
Anyone can see
  • The depositing address: the user's platform wallet
  • The token and the exact amount
Stays private
  • Whose private balance receives it
  • How the amount is split into notes
  • The zone it goes to
Private Send
Anyone can see
  • That a relayer sent a transaction
  • The relayer's tip, amount and token, if one is paid
Stays private
  • The sender
  • The recipient
  • The token and the amount
  • The zone
Withdraw
Anyone can see
  • The receiving address
  • The token and the exact amount
Stays private
  • Who withdrew
  • Which notes paid for it
  • The change left behind

A zone is a group of notes within the pool. Most apps use the default zone and never set one.

How privacy narrows

The proofs reveal nothing about the notes they spend. Privacy can still narrow in these ways:

  • Registration ties the wallets together. Anyone can see that your user's wallet and platform wallet belong to one account. So a deposit can be traced to your user.
  • Amounts and timing can match. A withdrawal of the amount just deposited, soon after, suggests the same person. The chain records no link, but the pattern is there.
  • A known destination gives it away. If the withdrawal address is already tied to your user, so is the withdrawal.
  • The relayer's tip is public. The SDK pays it in the token being moved, so a tip shows which token moved.
  • The recipient learns the sender. A Private Send records the sender's identity in the new notes. Bob can read it and follow it to Alice's wallets.
  • Rare tokens and schedules stand out. A token few people use, or payments at the same hour every week, are easier to group.

What this means for your app

  • Don't suggest an instant round trip. Value that stays in the pool for a while, with other activity in between, is harder to pair.
  • Don't default to withdrawing what was deposited. Different amounts remove the easiest match.
  • Let users choose where to withdraw. Withdrawing to the wallet that deposited links the two ends. Say so beside the address field.
  • Tell senders that recipients will know them. A Private Send is private from everyone except the person paid.
  • Keep the sign-in on the device. Whoever has the stored signature has the account. See The private account.

The protocol documentation covers each point in depth:

Last updated

On this page