> ## Documentation Index
> Fetch the complete documentation index at: https://tokenterminal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To query the Token Terminal data catalog, read https://tokenterminal.com/docs/catalog/agents-manual.md first. It is the whole catalog as one page: table naming grammar, key columns, partition and cluster rules, units, additivity, and the tables that are documented but not served yet.
> Never query a catalog table on a time bound alone. Also filter its cluster key, which you read from INFORMATION_SCHEMA.COLUMNS; an empty result means the object is a view, whose pruning contract is on its page. Compute is billed to the caller's own Google Cloud project.

# Raw

> The standardized HyperCore blocks, fills, orders, book changes and funding settlements.

The `hypercore` dataset holds the standardized HyperCore tables. HyperCore is an exchange rather than a general-purpose chain, so where an EVM chain publishes logs and internal calls, HyperCore publishes the streams its matching engine emits: what filled, what was ordered, how the book moved, and what funding was settled.

## Tables

<table>
  <thead>
    <tr>
      <th width="290">Table</th>
      <th width="140">Since</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>blocks</code></td>
      <td>2025-07</td>
      <td>One row per block, with the number of records each stream emitted in it.</td>
    </tr>

    <tr>
      <td><code>node\_trades</code></td>
      <td>2025-03</td>
      <td>One row per fill, in a slim shape: the account, market, side, price, size and whether the account crossed the spread.</td>
    </tr>

    <tr>
      <td><code>node\_fills</code></td>
      <td>2025-07</td>
      <td>One row per fill, in the full shape: the fee and the token it was paid in, the builder credited, the position direction and the liquidation fields where the fill closed a position.</td>
    </tr>

    <tr>
      <td><code>node\_fills\_without\_block\_number</code></td>
      <td>2025-05 to 2025-07</td>
      <td>The fills the node recorded before block numbers were attached to them, in the same shape as <code>node\_fills</code>.</td>
    </tr>

    <tr>
      <td><code>node\_funding</code></td>
      <td>2025-09</td>
      <td>One row per market per funding settlement, with the rate it applied and the amount settled on each side.</td>
    </tr>

    <tr>
      <td><code>events</code></td>
      <td>2025-09</td>
      <td>One row per exchange event outside trading, typed by <code>event\_kind</code> and, for ledger updates, by <code>ledger\_type</code>.</td>
    </tr>

    <tr>
      <td><code>orders</code></td>
      <td>2025-11</td>
      <td>One row per order status change, with the limit price, the size, the order type and the time in force.</td>
    </tr>

    <tr>
      <td><code>book</code></td>
      <td>2025-11</td>
      <td>One row per change to a resting order level, with the price and the level size before and after.</td>
    </tr>

    <tr>
      <td><code>twap</code></td>
      <td>2025-11</td>
      <td>One row per state change of a TWAP order, with the size and notional executed so far.</td>
    </tr>

    <tr>
      <td><code>writer\_actions</code></td>
      <td>2025-12</td>
      <td>One row per action written into HyperCore from HyperEVM, such as a spot send or a delegation, with the EVM transaction that sent it.</td>
    </tr>
  </tbody>
</table>

Blocks are keyed on `block_number`, fills on `trade_id` together with the account and side, orders and TWAPs on `order_id` and `twap_id`, and funding on the market and settlement time. `coin` is the market symbol as the venue lists it, and it is the join back to the market registries on [Perpetuals](/docs/catalog/chain-verticals/hyperliquid/perpetuals).

Three columns hold JSON, because their shape depends on a type column: `event_json` in `events`, `children` in `orders` and `action` in `writer_actions`. Read the type column first, then extract the fields that type defines.

## Sample queries

<Warning>
  Every table splits by day on `block_timestamp`. Bound it in every query and keep it bare on the left of the comparison; wrapping it in a function reads every partition. `book` and `orders` hold every resting-order change and every order state change, so they are the two largest tables here: bound them to a single day.
</Warning>

<Tabs>
  <Tab title="Daily trading">
    **Count daily fills and the accounts behind them.** `node_trades` is the slim fill stream, so it answers volume and participation questions at the lowest cost.

    ```sql theme={null}
    select
        timestamp_trunc(block_timestamp, day) as day,
        count(*) as fills,
        count(distinct account_address) as accounts
    from `hypercore.node_trades`
    where block_timestamp >= timestamp('2026-08-16')
      and block_timestamp < timestamp('2026-08-23')
    group by day
    order by day
    ```
  </Tab>

  <Tab title="Busiest markets">
    **Rank markets by notional traded on one day, with the fees they produced.** A fill's notional is its price times its size, and both are BIGNUMERIC, so the multiplication stays exact.

    ```sql theme={null}
    select
        coin,
        count(*) as fills,
        sum(price * size) as notional,
        sum(fee) as fees
    from `hypercore.node_fills`
    where block_timestamp >= timestamp('2026-08-20')
      and block_timestamp < timestamp('2026-08-21')
    group by coin
    order by notional desc
    limit 20
    ```
  </Tab>

  <Tab title="Funding settlements">
    **Read the funding paid on each market over one week.** `funding_rate` is the rate the settlement applied, and the long and short amount columns split the settled amount by the side of the position.

    ```sql theme={null}
    select
        coin,
        count(*) as settlements,
        avg(funding_rate) as average_rate,
        sum(long_funding_amount) as long_amount,
        sum(short_funding_amount) as short_amount
    from `hypercore.node_funding`
    where block_timestamp >= timestamp('2026-08-16')
      and block_timestamp < timestamp('2026-08-23')
    group by coin
    order by abs(sum(total_funding_amount)) desc
    limit 20
    ```
  </Tab>
</Tabs>
