What holds

Requirements the program has to meet, written down so they can be checked against the code. They are not test results: nothing is deployed and nothing is audited. Read the status page.

  1. Nobody holds your funds

    Deposits sit on a PDA: an address computed from the program, with no private key behind it. There is no team wallet, no admin instruction and no key to steal, leak or hand over.

  2. Only a valid proof moves a lamport

    The one way out is the withdraw path, and it runs only when it is handed a proof that someone holds the receipt for a deposit in the pool.

  3. Value cannot be minted

    A receipt is worth nothing unless the matching deposit actually arrived. The program cannot invent SOL it was never sent.

  4. A deposit cannot be withdrawn twice

    Withdrawing publishes a nullifier derived from your receipt. Present the same deposit again and the same nullifier comes out, and the second withdrawal fails.

  5. A relayer cannot alter a withdrawal

    Destination, amount and fee are sealed inside the proof. Change a byte and verification fails. The worst a hostile relayer can do is refuse to submit.

  6. The pause key cannot stop a withdrawal

    One key survives deployment, and it can only close the door to new deposits. It cannot move funds, block a withdrawal, change the code or see anything hidden.

The edges

What stays public

Every deposit: the wallet it came from, the amount, the time. Every withdrawal: the address it lands on, the amount, the time. The pool hides the line between the two and nothing else. That is how a pool on a public chain works, and the rest is your own care: wait before you withdraw, and do not withdraw into the wallet you deposited from.

  1. 01 Deposit

    Public

    A fixed amount of SOL, the wallet it came from, and one fingerprint.

  2. 03 Withdraw

    Public

    The amount and the address it lands on. Never which deposit paid for it.