Skip to main content

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​

  1. Open Shielded Pool and unlock the vault.
  2. Press Private Transfer. The form shows your Available Balance.
  3. 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.
  4. Recipient Privacy Address — paste the recipient's orbpriv3:… address. A public 0x…, SS58 or Solana account is not accepted here; to pay one, unshield instead.
  5. Show the recipient who paid — choose Anonymous, Pseudonym or My privacy address. See below.
  6. Press Transfer. The form closes and the proof job bar shows the progress. Your wallet is not asked to sign.
The Private Transfer form: amount, the recipient privacy address with the self-transfer box, and the three choices under Show the recipient who paid

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:

  1. One note that covers the amount and the fee.
  2. The smallest pair of notes from the same Merkle tree.
  3. 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:

OptionWhat the recipient sees in Activity
Anonymous (default)Anonymous sender
PseudonymSender “name” with a self-chosen badge: a name you typed, which nothing proves
My privacy addressSender 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.

My privacy address links your payments

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​

PublicPrivate
That a transfer happened, and whenWho sent it
A nullifier for each note spentWho received it
Two new commitments and their encrypted memosThe amount
The feeWhich 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.

An unshield still shows its recipient and amount

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​

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