<!-- https://zunderlabs.com/docs/methods/anonymisation · Markdown version of the page -->

# Anonymisation

How the live market hides trader addresses, what that protects against, and what it does not.

:::note[Planned]
Defined in `web/live/src/anon.ts` and `web/live/src/live.ts`, part of the live data module that is being built.
:::

The live market shows other people's trades. The data is public on Hyperliquid, but we still keep addresses and transaction hashes off the page.

## How

All of this happens inside a Web Worker, before anything reaches the page:

1. **Tags instead of addresses.** An address becomes `#` plus the first four hex digits of `SHA-256(salt ‖ address)`. The salt is 16 random bytes, drawn once per page load.
2. **Rounding.** Amounts to two significant figures, prices to four, times to the second.
3. **Dropping.** Transaction hashes, trade ids and addresses are never put into the events the page receives.

**Example.** A trader buys 1.2345 BTC at 61,234.56 at 14:03:07.412. The page shows `#3fa1 · buy 1.2 BTC · 61,230 · 14:03:07`. After a reload the same trader is `#91c0`.

## What it protects against

- Addresses in the page, the DOM, screenshots and screen recordings.
- Following one trader across visits: the tag changes on every reload, and the salt never leaves your browser.
- Looking a tag up: without the salt, `#3fa1` maps to no address.

## What it does not protect against

- **Matching against the public tape.** Hyperliquid publishes every trade. Someone who matches a rounded size, price and second against the public trade stream can often find the trade, and from it the address.
- **Collisions.** Four hex digits are 65,536 tags. Among 100 traders on screen, the chance that two share a tag is about 7%. That only affects the display.

So: anonymised for display, not secret. The point is not to put names on a page, not to hide what is public.

## Addresses you enter

Backtest and Watch take an address you type. It goes into the requests to Hyperliquid and nowhere else: not stored, not logged, not in a URL, not sent to us. Watch drops it when you stop.
