How HashSwap works
A confidential batch-netting layer over unmodified Uniswap v3 pools. For the narrative version, see how it works.
Sealing an order
Amount and direction are encrypted at the Nox gateway before the transaction is built. What reaches the chain is a 32-byte handle and a proof — the calldata contains no number a bot could read.
Netting
Orders accumulate into encrypted running totals. At close the contract computes crossed = min(buys, sells) and residual = |buys − sells| entirely over ciphertext, using branchless Solidity — no conditional ever sees a plaintext value.
Settlement
Only the residual is decrypted. A keeper fetches it with a gateway signature, and settle() verifies that signature on-chain before touching Uniswap. A keeper reporting a false residual reverts.
Clearing price
The residual executes as one swap. Whatever price it gets becomes the price for everyone in the batch — no ordering advantage, no queue position worth paying for.
Deployed contracts
Sepolia. Each market is its own instance — base, quote and fee are immutable.
Check it yourself
The confidentiality claim is the one worth testing rather than reading. Connect a wallet, read your own balance, then try to read a real trader's and watch the gateway refuse.
Don't take our word for it
Every balance is stored on-chain as a reference, not a number. Anyone can see the reference. Read yours below, then try to read someone else's.
Someone else's
Limits worth knowing
- Privacy scales with participation. A batch needs three orders before it can settle, because with one the residual would be that order.
- Uniform pricing is fair, not free. In a one-sided batch a small trader pays the aggregate's average price.
- The maker sees what it fills. When the market maker pads a thin batch it can infer the other side. The public still cannot.
- Testnet pools are priced arbitrarily. Markets flagged ODD RATE work correctly but do not reflect real-world rates.