Privacy
What Hushh Protocol hides on Arc, and what it does not. Stated plainly, because privacy claims you can not check are worthless.
What stays private
- No on-chain link between deposit and withdraw. The recipient withdraws with a Groth16 zero-knowledge proof that a note is in the Merkle tree, without saying which leaf. The withdraw transaction carries a nullifier, never the commitment from your deposit.
- Payments to the same person do not share an on-chain tag. Each payment is its own Poseidon commitment. Ten payments are ten unrelated notes in the pool.
- Amounts carry no distinctive signal. Notes use fixed USDC sizes (for example 1, 10, 50, 100), so an amount alone cannot match a deposit to a withdraw.
What does not
- Amounts are standardized, not encrypted. A 50 USDC note is a visible 50 USDC ERC-20 transfer into the pool. Privacy comes from everyone using the same sizes, not from hiding balances.
- Username resolution is off-chain. Looking up @username hits the Hushh Protocol backend. The server can see who looked up whom. It does not learn which on-chain note resulted.
- Merkle roots are posted by a relayer. An indexer watches deposits, builds the Poseidon tree, and posts roots on-chain. That operator is trusted for liveness and for posting correct roots. Decentralizing it is future work.
- The crowd is still small. Unlinkability hides you among deposits in the pool. While volume is low, that crowd is thin, and it strengthens as usage grows.
- Trusted setup is demo-grade. Groth16 needs a ceremony. The current keys are fine for Arc Testnet demos, not for production mainnet custody of large funds.
Network: Arc Testnet (chain id 5042002). Explorer: testnet.arcscan.app.
