본문으로 건너뛰기

BBO Book Dataset

업데이트 날짜:
2026년 6월 10일

개요

StreamBboBook stream delivers the best bid and best ask (top of book) for one or more coins. An update is emitted only when the best bid or ask changes for a coin, making it the lightweight feed for clients that just need live prices and spread without order book depth.

gRPC Service: OrderBookStreaming
gRPC Method: StreamBboBook
Update Model: Emit-on-change: one message per coin whose best bid or ask changed

작동 원리

StreamBboBook watches the top of the book for every subscribed coin and emits a message whenever the best bid or best ask changes, including size changes at the same best price. Compared to consuming full StreamL2Book snapshots:

  • Each message carries only the best bid and best ask, not full depth
  • Messages are emitted only on change, not every block
  • A single stream can cover multiple coins (or all coins with an empty 동전 list)
  • No client-side state management is required, since each message is the current top of book

Each message covers exactly one coin. If a side of the book is empty, the corresponding bid 또는 ask field is absent.

Data Structure

Each BboBookUpdate message contains the current best bid and ask for a single coin:

{
"coin": "BTC",
"time": 1781109022243,
"block_number": 586404610,
"bid": { "px": "62990", "sz": "0.001", "n": 1 },
"ask": { "px": "63054", "sz": "0.00008", "n": 1 }
}

Request Parameters

필드유형Required설명
동전반복되는 문자열아니요List of symbols to subscribe to (e.g., "BTC", "ETH"). Empty means all coins

Coin Naming

동전 parameter follows Hyperliquid's naming convention, which unambiguously distinguishes perpetuals from spot:

  • Perpetuals: Human-readable names, such as "BTC", "ETH", "HYPE", "SOL"
  • Spot tokens: @{index} format, such as "@1", "@107", "@142", "@166"
  • Outcome markets (HIP-4): #N format. Each outcome has two #N coins, one per side (Yes and No). Multi-price question markets consist of multiple grouped outcomes (price buckets plus a fallback), each with its own Yes/No coin pair. Use the outcomeMeta endpoint to map coin indices to market names and sides.
  • Exception: "PURR/USDC" is the only spot coin with a readable name

There is no overlap between formats. "BTC" always refers to the BTC perpetual; spot BTC is "@142". To discover @index mappings for spot tokens, query the meta 또는 spotMeta info endpoints.

Response Fields

BboBookUpdate

필드유형설명
동전문자열Symbol (e.g., "BTC", "ETH")
시간uint64Block timestamp in milliseconds
block_numberuint64Block number
bidL2LevelBest bid level. Absent if there is no resting bid
askL2LevelBest ask level. Absent if there is no resting ask

L2Level

필드유형설명
px문자열Price as a decimal string
sz문자열Total size across all orders at this price level, as a decimal string
nuint32Number of individual orders at this price level

Proto Definition

StreamBboBook is defined in orderbook.proto:

service OrderBookStreaming {
rpc StreamBboBook (BboBookRequest) returns (stream BboBookUpdate);
}

message BboBookRequest {
repeated string coins = 1;
}

message BboBookUpdate {
string coin = 1;
uint64 time = 2;
uint64 block_number = 3;
L2Level bid = 4;
L2Level ask = 5;
}

message L2Level {
string px = 1;
string sz = 2;
uint32 n = 3;
}

Example Updates

BBO Update (single coin)
{
"coin": "BTC",
"time": 1781109022243,
"block_number": 586404610,
"bid": { "px": "62990", "sz": "0.001", "n": 1 },
"ask": { "px": "63054", "sz": "0.00008", "n": 1 }
}
Consecutive Updates (emit-on-change)

Consecutive ETH updates demonstrating the emit-on-change model. A size change at the same best price triggers an update:

{ "coin": "ETH", "time": 1781109213042, "block_number": 586405802,
"bid": { "px": "1701.1", "sz": "0.015", "n": 1 },
"ask": { "px": "1701.2", "sz": "0.0176", "n": 2 } }
{ "coin": "ETH", "time": 1781109220213, "block_number": 586405844,
"bid": { "px": "1701.1", "sz": "0.015", "n": 1 },
"ask": { "px": "1701.2", "sz": "0.0105", "n": 1 } }
{ "coin": "ETH", "time": 1781109221825, "block_number": 586405854,
"bid": { "px": "1701.1", "sz": "0.0079", "n": 1 },
"ask": { "px": "1701.2", "sz": "0.0105", "n": 1 } }

API Usage

gRPC Streaming
// Single coin
const request = {
coins: ['BTC']
};

// Multiple coins in one stream
const multiRequest = {
coins: ['BTC', 'ETH', 'HYPE']
};

// All coins
const allCoinsRequest = {
coins: []
};

gRPC Only

StreamBboBook is only available via the gRPC Streaming API (OrderBookStreaming service). It is not available through JSON-RPC or WebSocket.

Comparison with StreamL2Book

FeatureStreamBboBookStreamL2Book
Data per messageBest bid and best ask onlyFull depth snapshot (up to n_levels per side)
Message cadenceOnly when the BBO changesEvery block
Coins per streamMultiple (or all coins)One coin per stream
Client-side state management없음없음
BandwidthLowest (top-of-book only)Medium (capped by n_levels)
다음에 가장 적합합니다Live prices, spread monitoring, tickersMarket depth, analytics dashboards

Important Notes


  • Emit-on-change: Updates are sent only when the best bid or ask changes for a coin, including size changes at the same best price
  • One coin per message: Each BboBookUpdate covers a single coin; subscribe to multiple coins (or all coins) on one stream and demultiplex by the 동전 field
  • Absent sides: If a side of the book is empty, the bid 또는 ask field is absent. Check for presence before reading it
  • zstd compression recommended: Enable zstd compression on your gRPC channel to reduce bandwidth, especially when streaming all coins

  • StreamL2Book - Aggregated price-level depth, full snapshot every block
  • StreamL2BookDiff - Incremental L2 price-level changes with sequence numbers
  • Trades - Executed trade data with maker/taker information
이 문서 공유하기