Resumen
El StreamL2Book stream delivers aggregated price-level depth for a given coin. Each message contains the full L2 snapshot — total size and order count at each price level — refreshed every block.
gRPC : OrderBookStreaming
gRPC : StreamL2Book
Modelo de actualización: Full snapshot every block — no client-side state management required
Cómo funciona
Instant, ongoing access to the full L2 order book: StreamL2Book delivers a complete L2 snapshot every block. There is no need to:
- Fetch an initial snapshot from the REST Info endpoint
- Stitch incremental diffs onto a snapshot
- Handle race conditions during the snapshot-to-diff transition
- Re-bootstrap on reconnect
Each message is the full current state of the order book at that block, aggregated by price level.
Estructura de datos
Each L2BookUpdate message contains the full aggregated book at the time of a block:
{
"coin": "BTC",
"time": 1764867600518,
"block_number": 817863403,
"bids": [
{ "px": "95000.0", "sz": "12.5432", "n": 47 },
{ "px": "94999.5", "sz": "8.2100", "n": 23 },
{ "px": "94999.0", "sz": "5.0000", "n": 12 }
],
"asks": [
{ "px": "95000.5", "sz": "10.8900", "n": 38 },
{ "px": "95001.0", "sz": "6.3210", "n": 15 },
{ "px": "95001.5", "sz": "3.7500", "n": 9 }
]
}
Parámetros de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| moneda | cadena | Sí | Símbolo para suscribirse: en los contratos perpetuos se utilizan nombres (p. ej., «BTC», «ETH»), mientras que en el mercado al contado se utiliza el formato @índice (p. ej., «@142») |
| n_niveles | uint32 | Sí | Maximum number of price levels to return per side (default 20, max 100) |
| n_sig_figs | uint32 | No | Significant figures for price bucketing (2–5). Omit for exact price-level aggregation. |
| mantissa | uint64 | No | Mantissa for price bucketing (1, 2, or 5). Used with n_sig_figs to control bucket width. |
Denominación de las monedas
El moneda El parámetro sigue la convención de nomenclatura Hyperliquid, que distingue sin ambigüedades entre los contratos perpetuos y los al contado:
- Perpetuos: Nombres legibles para las personas —
«BTC»,«ETH»,«HYPE»,«SOL» - Fichas al contado:
@{índice}formato —"@1",«@107»,«@142»,«@166» - Mercados de resultados (HIP-4):
#Nformato. Cada resultado tiene dos#Nmonedas: una por cada opción (Sí y No). Los mercados de preguntas con precios múltiples se componen de varios resultados agrupados (rangos de precios más una opción de reserva), cada uno con su propio par de monedas «Sí/No». Utiliza eloutcomeMetaendpoint asignar los índices de las monedas a los nombres y lados del mercado. - Excepción:
«PURR/USDC»es la única moneda de la serie «Spot» cuyo nombre se puede leer
No hay solapamiento entre los formatos. «BTC» siempre se refiere al contrato perpetuo de BTC; el BTC al contado es «@142». Para descubrir @índice asignaciones para tokens puntuales, consultar el meta o spotMeta puntos de información.
Price Bucketing
The optional n_sig_figs y mantissa parameters control how prices are aggregated into buckets. When omitted, each distinct price level is reported individually. When set, orders are grouped into price buckets — for example, bucketing BTC orders into $100 increments instead of exact prices.
n_sig_figs(2–5): Number of significant figures in the bucket pricemantissa(1, 2, or 5): Mantissa multiplier for the bucket width
Campos de respuesta
L2BookUpdate
| Campo | Tipo | Descripción |
|---|---|---|
| moneda | cadena | Símbolo (p. ej., «BTC», «ETH») |
| tiempo | uint64 | Marca de tiempo del bloque en milisegundos |
| número_de_bloque | uint64 | Block number |
| ofertas | L2Level[] | Aggregated bid levels, ordered best (highest) price first |
| pregunta | L2Level[] | Aggregated ask levels, ordered best (lowest) price first |
L2Level
| Campo | Tipo | Descripción |
|---|---|---|
| px | cadena | Price as a decimal string |
| sz | cadena | Total size across all orders at this price level, as a decimal string |
| n | uint32 | Number of individual orders at this price level |
Definición de «Proto»
StreamL2Book se define en orderbook.proto:
service OrderBookStreaming {
rpc StreamL2Book (L2BookRequest) returns (stream L2BookUpdate);
}
message L2BookRequest {
string coin = 1;
uint32 n_levels = 2;
optional uint32 n_sig_figs = 3;
optional uint64 mantissa = 4;
}
message L2BookUpdate {
string coin = 1;
uint64 time = 2;
uint64 block_number = 3;
repeated L2Level bids = 4;
repeated L2Level asks = 5;
}
message L2Level {
string px = 1;
string sz = 2;
uint32 n = 3;
}
Ejemplos de actualizaciones
Full L2 Snapshot (top 5 levels)
{
"coin": "BTC",
"time": 1764867600518,
"block_number": 817863403,
"bids": [
{ "px": "95000.0", "sz": "12.5432", "n": 47 },
{ "px": "94999.5", "sz": "8.2100", "n": 23 },
{ "px": "94999.0", "sz": "5.0000", "n": 12 },
{ "px": "94998.0", "sz": "3.1250", "n": 8 },
{ "px": "94997.5", "sz": "1.7500", "n": 5 }
],
"asks": [
{ "px": "95000.5", "sz": "10.8900", "n": 38 },
{ "px": "95001.0", "sz": "6.3210", "n": 15 },
{ "px": "95001.5", "sz": "3.7500", "n": 9 },
{ "px": "95002.0", "sz": "2.5000", "n": 6 },
{ "px": "95003.0", "sz": "1.2000", "n": 3 }
]
}
L2 Snapshot with Price Bucketing
When using n_sig_figs=3 y mantissa=1, prices are aggregated into broader buckets:
{
"coin": "BTC",
"time": 1764867600518,
"block_number": 817863403,
"bids": [
{ "px": "95000.0", "sz": "25.8782", "n": 82 },
{ "px": "94900.0", "sz": "18.4300", "n": 61 },
{ "px": "94800.0", "sz": "12.1000", "n": 34 }
],
"asks": [
{ "px": "95100.0", "sz": "21.0110", "n": 62 },
{ "px": "95200.0", "sz": "14.7210", "n": 40 },
{ "px": "95300.0", "sz": "8.9500", "n": 18 }
]
}
Uso de la API
gRPC
// Perp order book
const request = {
coin: 'BTC',
n_levels: 20
};
// Spot order book (@ index format)
const spotRequest = {
coin: '@142',
n_levels: 20
};
// With price bucketing
const bucketedRequest = {
coin: 'BTC',
n_levels: 20,
n_sig_figs: 3,
mantissa: 1
};
StreamL2Book solo está disponible a través de la API gRPC (OrderBookStreaming servicio). No está disponible a través de JSON-RPC ni de WebSocket.
Comparison with Book Updates Dataset
| Característica | StreamL2Book | BOOK_UPDATES (StreamData) |
|---|---|---|
| Includes current book state | Yes — every message is a full snapshot | No — forward-only diffs from subscribe time |
| Requiere el arranque de REST | No | Yes (Info endpoint l2Book) |
| Client-side state management | Ninguno | Build and maintain local book from diffs |
| Data granularity | Agrupados por nivel de precios | Diferencias a nivel de pedido individual |
| Reconnect handling | Automatic — full snapshot resumes | Must re-bootstrap from REST |
| Price bucketing | Supported (n_sig_figs, mantissa) | Not available |
Notas importantes
- Full snapshot every block: Each
L2BookUpdateis a complete snapshot — no need to track state across messages - zstd compression recommended: Enable zstd compression on your gRPC channel to reduce bandwidth, especially when streaming multiple coins
Streams relacionados
- StreamL4Book - Individual order granularity with user, oid, size, triggers, and timestamps
- StreamBboBook - Top-of-book best bid/ask, emitted only when the BBO changes
- StreamL2BookDiff - Incremental L2 price-level changes with sequence numbers
- Book Updates - Forward-only incremental diffs via StreamData
- Órdenes - Eventos del ciclo de vida de los pedidos (pendientes, completados, cancelados, etc.)
- Operaciones - Datos de operaciones ejecutadas con información sobre «maker» y «taker»