The withdrawal flow is where Abyss’s privacy guarantees are actually realized. Unlike deposits, which are publicly observable by necessity, withdrawals are designed to be cryptographically unlinkable to any prior on-chain activity. The protocol enforces this unlinkability not through heuristics or delay, but through zero-knowledge proofs that replace identity with knowledge. Conceptually, a withdrawal performs the inverse of a deposit, but without symmetry at the graph level:Documentation Index
Fetch the complete documentation index at: https://docs.useabyss.com/llms.txt
Use this file to discover all available pages before exploring further.
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

