Unshield & Private Send
Spend a complete note to a public recipient using the SDK's Unshield method or its Private Send alias.
The SDK's unshield method accepts { pool, mint, amount, recipient } and returns a signature. It locates a note matching that pool, mint and amount, proves ownership/membership, and transfers the full note value to the recipient's associated token account.
const available = (await shielded.getNotes()).find(
(note) =>
note.pool.equals(pool) &&
note.asset.equals(tokenBMint) &&
note.state === "available",
);
if (!available) throw new Error("No available note for this asset");
const signature = await shielded.unshield({
pool,
mint: tokenBMint,
amount: available.amount,
recipient: recipientPublicKey,
});The recipient is public and bound into the Unshield public inputs. The operation requires the authenticated prover, a persistent note store, a validated LUT and a wallet that signs v0 transactions.
Private Send
shielded.privateSend({ pool, mint, amount, recipient }) is an SDK alias that delegates to unshield with the same arguments. It is not a separate on-chain private_send instruction and does not create a shielded note for the recipient. It exits to the recipient's public SPL token account.
Unshield consumes a complete note; partial unshield is not supported by this release. A transaction payer/relayer can differ from the note owner, but recipient, amount, asset and public transaction metadata remain visible.