Private withdrawals
Withdraw to any fresh address. A relayer pays the gas, so the new wallet never needs funding from the old one.
Private ETH transfers on Robinhood Chain. See what your wallet gives away, then cut the link: a zero-knowledge proof made in your browser moves your ETH to a fresh wallet that nothing points back from.
Privacy that you can check, built on audited open-source contracts.
Withdraw to any fresh address. A relayer pays the gas, so the new wallet never needs funding from the old one.
Every deposit is screened against OFAC and known scam wallets. Your proof shows you are in the clean set, so honest users never share a crowd with hackers.
The owner role was renounced at deploy. Nobody can upgrade, pause or move funds. Ragequit always returns a deposit to the wallet that made it.
See what anyone can see about a wallet: where its money came from and where it went, across Robinhood, Ethereum, BSC, Base and Solana.
Three steps. The secret part happens on your device.
Create a 12-word Zero Key. Your wallet sends ETH with a commitment derived from it: a hash that hides who can spend it.
The ASP checks the deposit (about 30 minutes). Meanwhile others deposit too. Everyone approved is your anonymity set.
Your browser builds a zero-knowledge proof: "I own one of these clean deposits." The relayer submits it to a fresh address.
Not a mock-up. These are the circuits and contracts the pool runs on.
// packages/circuits/circuits/withdraw.circom (excerpt)
// 3. Your note is somewhere in the pool tree…
component stateRootChecker = LeanIMTInclusionProof(maxTreeDepth);
stateRootChecker.leaf <== existingCommitment;
stateRootChecker.siblings <== stateSiblings;
stateRoot === stateRootChecker.out;
// 4. …and its deposit is in the clean (ASP) set
component ASPRootChecker = LeanIMTInclusionProof(maxTreeDepth);
ASPRootChecker.leaf <== label;
ASPRootChecker.siblings <== ASPSiblings;
ASPRoot === ASPRootChecker.out;
// 6. A spent note can never be spent again
nullifierEqualityCheck.in[0] <== existingNullifier;
nullifierEqualityCheck.in[1] <== newNullifier;
nullifierEqualityCheck.out === 0;
Honest limits. If a privacy tool promises more, be careful.
You hide in a crowd. A small pool is a small crowd. Wait, and let others deposit, before you withdraw.
Deposits and withdrawals are public. Depositing 0.3712 and withdrawing 0.3712 is easy to match. Use round amounts.
Flagged deposits are denied. They can only ragequit, publicly, back to the wallet that sent them.
No accounts, no custody. Your 12-word Zero Key is the only way to withdraw. Write it on paper.
No. Funds sit in a smart contract with no owner. Only someone holding a note's secret can withdraw it, and only the depositing wallet can ragequit.
We do. It can approve or deny deposits for private withdrawal. It cannot move or freeze funds: a denied deposit can always ragequit back to its sender.
The contracts keep working without us. Your Zero Key rebuilds your deposits from the chain, and ragequit needs nothing but the contract.
So hacks can be reported before stolen funds get a private exit, and so more people deposit after you.
A read-only scan of any wallet's public money trail. Use it before you deposit to see what is already linked to you, and after you withdraw to check that your fresh wallet only shows the relayer.
No protocol fee. The relayer charges only the gas it pays, capped at 0.5% by the contract.