Skip to main content

Private Transfers

This guide covers sending tokens privately between privacy addresses.

Basic Transfer

Transfer Parameters

Transfer Result

Paying Several Recipients at Once

sendBatch pays every recipient from one set of input notes, in a single request: one fee instead of one per recipient, and one epoch slot instead of several. Output order follows the list, and the same recipient may appear more than once.

How many recipients fit

The server proves a fixed set of (inputs, outputs) shapes, and a transfer has to fit inside one of them. Its output count is your recipient count plus a change note, so a longer recipient list leaves room for fewer input notes: So 5 inputs by 3 outputs is not provable, even though 15 inputs and 11 outputs are each individually fine. In practice: past two recipients, the transfer has to be coverable by at most four notes. Consolidate fragmented notes first if a batch is rejected with UNSUPPORTED_TRANSFER_SHAPE, or split the payout across two batches.

Privacy Address Validation

Always validate privacy addresses before sending:

Looking Up Privacy Addresses

If you have a user’s MPK or Ethereum address, you can look up their privacy address:

Checking Balance Before Transfer

Transfer Privacy

Private transfers provide:
  • Sender Privacy: Your wallet address is not linked to the transaction
  • Recipient Privacy: The recipient’s wallet address is not revealed
  • Amount Privacy: The transfer amount is encrypted
  • Relationship Privacy: No public link between sender and recipient
Only the sender and recipient can see the transfer details.

Error Handling

Best Practices

1. Validate All Inputs

2. Confirm Large Transfers

3. Handle Network Delays

Next Steps