Params

The other fields are as in Private Transfer.

Execution

  1. _checkSpend: relayer allowlist, tx nullifier, root
  2. Verify 38 public inputs
  3. Spend nullifiers
  4. Insert change and fee-change commitments in one batch
  5. Pay fee to msg.sender
  6. Accrue floor(value × withdrawalFeeBps / 10,000) to the treasury, and pay the rest to the recipient
  7. Emit ProtocolFeeCharged(WITHDRAWAL, txNullifier, coin, fee) and ShieldedWithdrawal
There is no round or timestamp check. Round-mode timing is applied off-chain by the scheduler.

Event