Skip to main content

From HIP-3 Order Flow to a Defensible Wallet Taxonomy

6 min read

Test whether a HIP-3 wallet classification is stable on rerun by pulling one historical window twice and comparing the buckets.

Arrakis's own study, published April 8, 2026 with 0xArchive credited alongside HyperTracker for the 808 million order events behind it, states a limit up front: the retail share is "a floor, not a ceiling," because the interface cannot tag limit orders. Preserve that limit when rerunning the classification. Pull the same window twice, a week apart, and check whether the buckets agree. Because the window is historical and fixed, any gap has to trace to how the pipeline reassembled the data, not to a change in market history. Read the full study for the participant findings, then use the comparison to see what the native API leaves out.

Where it breaks

A market-by-market classification misses cross-market traders. 209 wallets traded all four silver markets in the Arrakis study. Finding that group requires a classification across markets. Tighten a threshold after the fact, and every borderline wallet needs re-checking against order-book state at the moment the label was assigned, not just the fill that triggered it.

Repeated classification run showing nearly unchanged market-maker, retail, and unclassified bucket shares.
Running the same classification rules twice on the same window produces nearly identical category shares, supporting repeatability.

What it runs on

Start with the fill: /trades/{symbol} gives served fill-level trade rows with wallet attribution, verified back to February 2026. That alone tells you what a wallet did, not how it got there. /orderbook/{symbol}/history holds the book state around each labeling decision; across the seven Arrakis study markets specifically, that starts February 16, 2026 for the earliest and March 4 for the latest. /orderbook/{symbol}/l4/diffs holds the add, modify, and cancel events, live from March 10, 2026. /orderbook/{symbol}/l4 holds the resting order-level book itself, reconstructed from the nearest checkpoint at or before any requested moment, available once the first checkpoint lands shortly after March 10: captured resting orders with price, size, and ID. /orders/{symbol}/history holds wallet-attributed order state on the same range. Reproducing a study at this scale means pulling from all five of these routes; a rerun draws from the same five.

The precomputed version of the same fields

/wallets/classify precomputes the same fields, one row per wallet per day: cancel rate, maker ratio, order-to-trade ratio, whether a wallet uses TWAP or trigger orders. There is no symbol parameter: each row covers a wallet's behavior across every HIP-3 market it touched that day, the same cross-market reach that captures a cohort like the 209 silver-market wallets above. A per-symbol pull cannot produce that cross-market view. The endpoint filters directly on the fields a threshold-based taxonomy uses: min_cancel_rate and max_cancel_rate pull exactly the wallets a bucket boundary would separate, without a separate filtering pass. Pull the same date twice, a week apart, and the wallet metrics match exactly; only the request_id in the response envelope changes.

Checking that a rerun actually agrees

Build the taxonomy from the five raw routes, then pull the same window twice, a week apart, and diff the wallet-to-bucket assignments. Because the window is historical and fixed, any bucket change means the assignment logic saw different inputs on the second pull. A wallet that flips buckets because the order-book snapshot at labeling time came from a different pagination cursor is exactly that kind of bug. The book state must be queryable from the nearest checkpoint at or before the label was assigned, not approximated from a nearby fill.

Pull the record

curl "https://api.0xarchive.io/v1/hyperliquid/hip3/trades/xyz:TSLA?start=1782777600000&end=1782864000000" \
  -H "X-API-Key: $OXARCHIVE_API_KEY"

Pair that with /orders/{symbol}/history for wallet-attributed order state and /orderbook/{symbol}/l4 for book state from the nearest checkpoint at or before the label time. Use the same five routes on every rerun so the comparison remains comparable.

What native can't give a taxonomy

Hyperliquid's API answers what happened on one trade, not what the book looked like when a wallet's order sat in queue three weeks ago. The comparison tests that gap directly. A native-only taxonomy would have to reconstruct the book context for each run.

Pull /wallets/classify for the same date a week apart and compare the wallet metrics. If the numbers match and only request_id changes, the precomputed classification is stable without touching the raw routes. Create a free account to try it.

Sources