Skip to content
LearnHyperCore8 pages
HyperCore overviewFoundationHyperCore is where Hyperliquid's order books, margin, clearing and settlement run as native protocol state, applied by every validator in one order.The clearinghouse: one margin enginePractitionerHyperCore's clearinghouse holds balances and positions and checks margin on every trade; in standard mode each perp dex has its own balance and cross margin.The order book and matchingPractitionerEach HyperCore asset has one on-chain book matched in price-time priority, with cancels and post-only orders sequenced ahead of orders that take liquidity.Oracles, mark prices and robust price indicesPractitionerValidators publish perp oracle prices every 3 seconds; the mark price used for margin and liquidation is a median that no single book or venue can move.Quote assets: USDC, USDH, aligned and permissionlessPractitionerAny token can become a HyperCore quote asset if its issuer stakes 200k HYPE against a peg and liquidity standard; aligned issuers also share reserve yield.Vaults: HLP, protocol vaults, user vaultsFoundationA vault pools depositors' USDC into one HyperCore account run by one strategy; HLP is the protocol vault that makes markets and performs liquidations.Multi-sig accountsPractitionerHyperCore can make any account a native k-of-n multi-sig with no smart contract, but CoreWriter stops working for it and its HyperEVM side keeps the old key.API servers and how state reaches youPractitionerAPI servers follow a node, keep a local copy of HyperCore state, answer reads from it, and reply to a transaction only once it executes in a committed block.

Measuring Hyperliquid: volume, open interest, users

Foundation

Public Hyperliquid figures disagree mostly because each counts the same fills differently; a number means something only with its rows and units.

Two dashboards can report one market’s volume over the same days, differ by tens of per cent, and both be right. They add up different rows. Before you quote a figure, know which rows it counts.

Every match writes two fills of equal notional sharing one tid: the taker’s (crossed: true) and the resting maker’s.

Say one trade of 1,000 USDC matches. Sum both rows → 2,000. Halve the sum → 1,000. Count each tid once → 1,000. Now say your archive kept only the taker row: halving gives 500, while counting each tid once, from whichever row exists, still gives 1,000.

One match one tid, notional N Taker row crossed: true, notional N Maker row crossed: false, notional N Sum every row: 2N the raw fill sum Halve the sum: N right only if both rows were recorded Count each tid once: N still right when one row is missing
Every match is recorded twice. Summing doubles it, halving assumes both records survived, counting trade ids does not.

Where most trades kept only one row, halving undercounts them by half. Check how many trades in your window have both rows.

On outcome books only Buy and Sell fills are matches. The rest cross no book:

  • Settlement fills: one per holder at settlement, paid from the collateral pot. The losing side’s has notional 0 and none carries a builder code; report them apart from trading.
  • Conversion fills: split, merge, negate and merge question, priced at 1/n. One dataset counts them as trading volume, another excludes them.

A lens is a rule for which fill rows to add:

Lens What it adds up What it answers
matched One notional per tid, attributed through the taker’s builder code How much money changed hands
routed Both rows of every trade whose taker used a builder code How much two-sided flow an app’s takers started
tagged Every row carrying builder code X, taker or maker How much flow carried an app’s code
buy_side Rows where the fill side is B Volume by the buyer’s record only
hm_headline All trading fill rows, divided by 2 The halving convention several public trackers use; network level only
hl_official Rows that paid a fee, plus winning-side settlement Hyperliquid’s own rule for outcome volume

At network level, tagged is effectively the raw sum of non-settlement fills. Officially, per the fee docs, outcome trades pay only when closing or settling and only fee-paying volume counts: minting and a match between two opening orders count nothing, however large, though row-counting lenses include them.

openInterest in asset contexts is in base units (coins or contracts), not dollars: multiply by markPx. An outcome’s open interest is each side’s circulatingSupply, and the sides need not match, so name the side or give both.

One person can run a master account, sub-accounts and vaults (each its own clearinghouse account) and API wallets (which only sign; querying one returns an empty result), and a HyperEVM contract can hold a HyperCore account. Address counts overstate people; signer counts count keys.

Measurement Value
Halved fill sum vs one count per trade, same outcome archive about $29.27M vs about $46M
Archived trades with only one of their two rows about 67%
Trades with both rows in one node-fill archive, 2 to 15 May 33.3% of 874k
Conversion fills (split, merge, negate) among outcome fills about 1 in 5
Inflation from mixing trading and settlement volume about $20M
Network tagged plus settlement vs the official statistics page within about 4%
Outcome pairs whose Yes and No supply differed 89 of 192
Fills per userFillsByTime response at most 2,000; only the 10,000 most recent are available

Every fill carries what a lens needs: tid, crossed (true for the taker), side (B buy, A sell), fee, the optional builderFee, and dir, which names conversions (Split Outcome, Merge Outcome, Negate Outcome, Merge Question) and Settlement.

matched = sum of notional, one row per distinct tid
tagged(X) = sum of notional over rows where builder = X
hm_headline = (sum of notional over all Buy and Sell rows) / 2
hl_official = sum of notional over rows with fee > 0
+ sum of notional over Settlement rows with notional > 0
  • Deduplicate on tid, never on hash: an order’s partial fills share a hash.
  • No public stream carries all fills. Per-user history comes from userFills and userFillsByTime; the public trades WebSocket channel names both counterparties as [buyer, seller].
  • Network-wide history is node fill data, node_fills_by_block, published by a non-validating node with the requester paying for transfer.
  1. Lens: rows, trades, halved rows or fee-paying rows.
  2. Exclusions: settlement; split, merge and negate conversions.
  3. Scope: validator-operated perps, HIP-3 perp dexes, spot, outcome markets, or all.
  4. Window: exact start and end, not “recently”.
  5. Open interest units: base units or dollars at mark; for an outcome, which side.
  6. Users: addresses that traded, held funds or signed.
  7. Source and gaps: API caps, archive completeness.
  8. Never compare numbers built with different lenses.

For where fills and archives come from, see Data: historical, node and explorer. For other claims to check before print, see Common misconceptions.