Private Send
In v0.1.0, Private Send is an SDK-level use of Unshield to an arbitrary public recipient.
In the current release, Private Send is not a separate on-chain instruction. It is a product-level use of the existing Unshield primitive with an arbitrary public recipient.
Alice's private note
↓ proof of spend authorization
Unshield instruction
↓ public SPL transfer
Bob's public token accountAlice's spend secret and note witness are not included as plaintext in the transaction. Bob's recipient address, asset, amount, payer, transaction time, pool and nullifier are public. The transfer exits shielded custody into Bob's public balance.
SDK call
The current SDK method delegates directly to Unshield:
const signature = await shielded.privateSend({
pool,
mint,
amount: note.amount,
recipient: bobPublicKey,
});Unshield consumes the complete note, so amount must equal the selected note's value. The SDK does not implement a separate hidden recipient note or a private-send instruction. See SDK Unshield & Private Send.