Value-flow events
Withdrawal is the settlement event and carries the nullifier. There is no separate spent-nullifier event and no withdrawal output commitment.
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.