hyperliquid.build
UTC
DATA-SEMANTICS-OPEN-INTEREST-AND-L2BOOK(7)hyperliquid.build HandbookDATA-SEMANTICS-OPEN-INTEREST-AND-L2BOOK(7)

Name

Data semantics that bit us: two-sided open interest, 20 visible levels, and short-lived walls

openInterest is the sum of both sides, l2Book shows 20 levels per side, most large resting orders sit outside them, delisted assets stay in meta, and other field semantics we had to learn by measuring.

published 2026-09-30updated 2026-09-30

Every item here cost us a wrong chart or a wrong conclusion before we measured it. Each one states what we assumed, what the data showed, and what we do now.

openInterest counts both sides

We assumed openInterest was one side of the market, as on some venues, and divided position data by it to get a coverage ratio. Two checks showed otherwise: across 137 markets the largest single-side share we could reconstruct never exceeded 50% of openInterest, and reconciling trade by trade, the ratio of |change in OI| to traded size topped out at exactly 2.00. openInterest is longs plus shorts. Coverage and "share of OI" metrics must divide by OI × price without halving.

l2Book is 20 levels, and the interesting orders are often outside

l2Book returns up to 20 price levels per side (aggregation is controlled by nSigFigs). Two measurements from our liquidation radar:

  • Of 1,054 resting orders of $50k or more placed by 55 large accounts during one day, only 19 were inside the visible 20 levels at the time we sampled.
  • Of 8,725 "walls" (resting size of $50k or more) observed in 24 hours, only 10 lived longer than 10 minutes.

So the visible book is a partial and fast-moving picture. It is still the right input for a slippage model, because it is what a market order will actually hit; but any claim about "support" or "resistance" from resting size needs a wider window than l2Book gives.

meta keeps delisted assets

The meta response for a deployer includes assets with isDelisted: true. On the xyz deployer 19 of 128 entries were delisted on 2026-09-30. Iterate universe with that flag in mind, or your market list, index arithmetic and "new listing" alerts will be wrong. New assets also appear at the end of the array, so never hard-code positions.

Two timestamps, keep both

Every message we store carries the exchange's time and our own receive time. Latency between them is small on a quiet day and visibly larger during bursts, which is itself a useful signal. Building on one timestamp alone loses that, and makes cross-source alignment harder later.

Size rounding and minimums

Orders must respect szDecimals from meta and the exchange's minimum notional (about $10 at the time of writing). A replay that ignores rounding will place fills that the exchange would have rejected; ours did, until we added the check.

Historical archive cadence

The official historical archive is updated roughly monthly, and days can be missing. If you need continuous data, collect it yourself and record every gap. The Liquidity Lab's own collector has been running since 2026-06-16; its known gaps are listed on the methodology page.

Checklist

  1. Never halve openInterest.
  2. Treat l2Book as a 20-level window, not the book.
  3. Filter isDelisted; do not index universe by position.
  4. Store exchange time and receive time.
  5. Round to szDecimals, enforce the minimum notional, and mark rejected fills in replays.

See also

hyperliquid.build2026-09-30DATA-SEMANTICS-OPEN-INTEREST-AND-L2BOOK(7)