Skip to main content

8.1 Deposit as a State Transition

A deposit into Abyss is not merely a token transfer. It is a state transition that transforms publicly traceable assets into private, cryptographically represented value. This transition is irreversible at the graph level. Once assets enter the anonymity pool, their linkage to the depositor’s address is permanently severed, subject to the protocol’s privacy assumptions. Conceptually, a deposit executes the following transition:
(public_asset, public_address)
  → (private_commitment, secret)
The protocol does not record depositor identity beyond the transient transaction required to move funds into the system.

8.2 Deposit Workflow

The deposit process consists of four deterministic steps:
1. Asset Conversion
2. Commitment Generation
3. Merkle Tree Insertion
4. Root Finalization
Each step is verifiable and constrained.

8.3 Asset Conversion

Upon deposit, the incoming asset is converted into $V as described in Section 7. This step ensures uniformity of the anonymity pool.
V_amount := convert(asset, amount)
Conversion rates are determined externally and do not affect privacy guarantees, only economic equivalence.

8.4 Commitment Generation

The depositor’s client generates a secret and derives a commitment:
secret_key := random()
commitment := H(secret_key || deposit_nonce || V_amount)
Only the commitment and amount are submitted on-chain. The secret never leaves the client environment.

8.5 Merkle Tree Insertion

The commitment is inserted into the global Merkle tree:
MerkleTree.append(commitment)
new_root := MerkleTree.root()
This root becomes the canonical representation of the pool’s state. Users will later reference this root when proving membership.

8.6 On-Chain Deposit Contract

The deposit contract enforces invariants:
function deposit(bytes32 commitment, uint256 amountV) external {
    require(amountV > 0, "INVALID_AMOUNT");
    require(!commitmentExists[commitment], "DUPLICATE_COMMITMENT");
    transferVFrom(msg.sender, address(this), amountV);
    insertCommitment(commitment);
}
No address metadata is persisted beyond this call.

8.7 Privacy Implications at Deposit Time

Deposits are public transactions. Abyss does not attempt to hide that a deposit occurred. Privacy emerges because:
  • Withdrawals are unlinkable
  • Commitments reveal no identity
  • Timing correlation weakens as pool activity increases
Users are encouraged to delay withdrawals and interleave activity to maximize anonymity.

8.8 Failure Modes

If a deposit transaction fails:
  • No commitment is created
  • No privacy guarantees apply
  • Funds remain in user custody
There is no partial deposit state.

8.9 Design Guarantees

Deposits guarantee:
  • Conservation of value
  • Non-duplication of commitments
  • Monotonic growth of the anonymity set
They do not guarantee immediate privacy. Privacy strengthens over time and usage.