Value-flow events
Withdrawal is the settlement event and carries the nullifier. There is no separate spent-nullifier event and no withdrawal output commitment.
CommitmentInserted.encryptedPayload is public ciphertext used for wallet recovery discovery. It carries no wallet address or plaintext note secret. Clients must bind it to the event’s pool, commitment, payload hash, runtime context, and wallet-derived key before decryption.
Tree events
An expired root leaves the deposit intact. Rebuild membership against a newer accepted root that still contains the same bundle commitment.
Fee and control events
When a flow is complete
For a deposit, match a successful receipt at the configured pool withCommitmentInserted for the prepared commitment, amount, payload, and leaf index. RootAccepted should identify that same commitment.
For a withdrawal, match a successful receipt with the pool’s spent-nullifier mapping and one Withdrawal event containing the intended nullifier, destination, gross amount, net amount, fee, and payload.
Completion requires a successful receipt and the expected event. If either is missing, keep the original request identity and reconcile before trying again.
