V.2.1 Withdrawal Preconditions
To initiate a withdrawal, a user must possess:- The original
secret_key - An unused withdrawal index
i - A Merkle root corresponding to a valid pool state
V.2.2 Nullifier Generation
Each withdrawal consumes a unique nullifier derived deterministically from the secret:V.2.3 Proof Construction
The client constructs a zero-knowledge proof asserting the following statement:- Merkle root
- Nullifier
- Withdrawal amount
- Recipient address
- Secret key
- Merkle path
- Internal balance state
V.2.4 On-Chain Verification and Settlement
The withdrawal contract verifies the proof:- Funds are released
- The nullifier is permanently burned
- No state links are introduced
V.2.5 Privacy Properties
From an observer’s perspective:- The withdrawal could correspond to any commitment in the pool
- Timing does not imply linkage
- Amount does not imply provenance
V.2.6 Failure Modes
Withdrawals fail if:- The proof is invalid
- The nullifier is reused
- The amount exceeds remaining balance
- The Merkle root is stale or invalid
V.2.7 Implications
This flow enables Abyss to function as:- A private payment rail
- A settlement layer for exchanges
- A privacy-preserving payout mechanism

