Private Transfer
A private transfer pays a privacy address from your notes. The chain sees that a transfer happened, but not the sender, the recipient or the amount.
Send a private transfer
- Open Shielded Pool and unlock the vault.
- Press Private Transfer. The form shows your Available Balance.
- Amount — enter what the recipient receives, or press Max. Below the field the form shows Max sendable, the Fee and the Change (stays private) that returns to you.
- Recipient Privacy Address — paste the recipient's
orbpriv3:…address. A public0x…, SS58 or Solana account is not accepted here; to pay one, unshield instead. - Show the recipient who paid — choose Anonymous, Pseudonym or My privacy address. See below.
- Press Transfer. The form closes and the proof job bar shows the progress. Your wallet is not asked to sign.
When the transfer confirms, the Private Transfer Sent receipt opens with the Amount, Fee, Recipient, Tx Hash, Date and the payment slip — see Payment Slips. The recipient sees the payment once they import that slip, or scan the pool with Sync or Recover Notes — see Receive Privately.
Choose notes
A transfer spends one or two of your notes. By default the form shows Notes picked automatically, in this order of preference:
- One note that covers the amount and the fee.
- The smallest pair of notes from the same Merkle tree.
- The smallest pair from any trees. A pair from two trees shows which two trees your notes are in, so it is the last choice.
To pick them yourself, press Choose notes and select up to two in Select notes. The amount fills in with Max from selected notes. Once you pick one note, notes that cannot go in the same transfer are locked: another asset, or a circuit version the wallet cannot spend. Clear — back to automatic returns to the automatic choice.
Self-transfer
Tick Self-transfer (merge my own notes) to fill in your own privacy address. The transfer comes back to you as one note, which is how you combine notes:
- when your balance is spread over more notes than one transfer can spend;
- before a large unshield, which spends a single note.
A self-transfer names nobody, so Show the recipient who paid is hidden and no receipt or slip is shown.
Showing the recipient who paid
The sender is never visible on chain. Show the recipient who paid decides only what the recipient's wallet shows:
| Option | What the recipient sees in Activity |
|---|---|
| Anonymous (default) | Anonymous sender |
| Pseudonym | Sender “name” with a self-chosen badge: a name you typed, which nothing proves |
| My privacy address | Sender and your privacy address with a verified badge: the payment proves it came from the holder of that address |
A pseudonym is 1–24 letters or digits, with no spaces or symbols. Anything else shows "Only letters and digits, up to 24." under the field and keeps Transfer disabled.
The recipient can link every payment you send them this way to your privacy address. Choose it only for someone who should know who you are.
How the sender identity is carried and checked:
What source_pk is — and is not.
What is public
| Public | Private |
|---|---|
| That a transfer happened, and when | Who sent it |
| A nullifier for each note spent | Who received it |
| Two new commitments and their encrypted memos | The amount |
| The fee | Which notes were spent |
| Which Merkle tree each spent note is in |
Full picture: Privacy Architecture.
The fee
Every transfer pays a spend fee of 0.001 ORB, taken from the notes you spend. You need no public balance to send. Before proving, the app checks the fee against the chain's minimum.
Who receives the fee
The validator that includes the transfer in a block. The transaction names no fee recipient, so nobody can redirect it, and resending someone else's transfer earns nothing. See Spend Fees.
How it is sent
The app sends a transfer without a signature. The proof authorises it, so:
- no wallet popup;
- no gas from a public balance — the fee comes out of the notes;
- no account on the transaction — nothing on chain links your address to it.
The network accepts transfers and unshields only this way. Your wallet signs only the message that unlocks the vault and each shield.
Unshields are sent the same way, but they publish the destination and the amount by design. Sending unsigned hides who withdrew, not what was withdrawn.
Errors
| Message | What to do |
|---|---|
| "Not a valid privacy address. Expected format: orbpriv3:…" | Paste the full orbpriv3: address again. |
| "Not enough balance for this amount + fee." | Lower the amount, or press Max. |
| "Your notes can't cover this amount together yet." | No two notes cover it. Merge notes with a self-transfer first. |
| "That note was already spent — syncing your notes…" | Your notes were behind the chain. Try again once they update. |
| "The proof was built against an outdated tree. Rescan and try again." | Press Sync, then send again. |
| A message containing "the note has no known position in the tree; Recover Notes places it" | Run Recover Notes once, then send again. |
| "The fee is below the network minimum." | Reload the app and try again. |
Related
- Payment Slips — so the recipient does not have to scan
- Receive Privately — the recipient's side
- Note Discovery — how a payment names its sender
- Transfer Circuit — what the proof proves
- Spend Fees — how the fee is credited and claimed