Zum Hauptinhalt springen

L4-Auftragsbuch-Datensatz

Aktualisiert am
18. Juli 2026

Übersicht

Die StreamL4Book Der Stream liefert das vollständige Orderbuch auf der Ebene einzelner Orders – jede ausstehende Order mit Benutzeradresse, Order-ID, Volumen, Auslöseinformationen und Zeitstempeln. Bei der Anmeldung sendet der Stream zunächst eine vollständige Momentaufnahme aller ausstehenden Orders und anschließend inkrementelle Differenzen pro Block.

gRPC : OrderBookStreaming
gRPC : StreamL4Book
Verfügbarkeit der API: Nur gRPC -API Modell aktualisieren: Vollständiger Snapshot beim Abonnieren, anschließend inkrementelle Diffs pro Block, wobei jederzeit verbindliche Ersatz-Snapshots möglich sind

So funktioniert es

  1. Beim Abonnieren: Der Stream sendet einen vollständigen L4BookSnapshot mit allen aktuellen Geld- und Briefkursen sowie vollständigen Auftragsdetails
  2. Danach pro Block: Der Stream sendet L4BookDiff Nachrichten mit einer JSON-kodierten Daten Zeichenkette, die Folgendes enthält Bestellstatus (alle Objekte zum Bestellstatus, die dem „Orders“-Stream entsprechen) und book_diffs (schrittweise Änderungen mithilfe von raw_book_diff (Format, das dem „Book Updates“-Stream entspricht)
  3. Wenden Sie die Diffs auf Ihre lokale Kopie des Snapshots an, um den aktuellen Zustand beizubehalten
  4. Ersatz-Snapshots: Der Stream kann einen weiteren senden L4BookSnapshot nach dem ersten Snapshot, beispielsweise wenn eine ALO-Prioritätsgebühreneinfügung die Warteschlangenreihenfolge ändert oder wenn der Stream-Status neu aufgebaut wird. Behandle jeden Snapshot als maßgeblich: Verwerfe beide Seiten des lokalen Buches und baue es neu auf ab Gebote und fragt in der ausgegebenen Reihenfolge und wenden Sie die späteren Diffs aus diesem Snapshot weiterhin an Höhe

Dies ist eine deutlich einfachere Methode, um eine lokale L4-Order-Book-Ansicht zu erstellen und zu pflegen, da der anfängliche Snapshot bereits integriert ist – ein REST-Bootstrap oder das Zusammenführen bei Race-Conditions ist nicht erforderlich. Bei einer erneuten Verbindung wird automatisch ein aktueller Snapshot bereitgestellt.

Datenstruktur

Momentaufnahme (erste Nachricht und Ersetzungen)

Die anfängliche L4BookSnapshot enthält das vollständige Orderbuch. Spätere Snapshots verwenden dieselbe Struktur und ersetzen das lokale Orderbuch vollständig:

{
"snapshot": {
"coin": "ETH",
"time": 1764867600518,
"height": 817863403,
"bids": [
{
"user": "0x1c1c270b573d55b68b3d14722b5d5d401511bed0",
"coin": "ETH",
"side": "B",
"limit_px": "3167.4",
"sz": "1.5785",
"oid": 258166296856,
"timestamp": 1764867590000,
"trigger_condition": "N/A",
"is_trigger": false,
"trigger_px": "0",
"is_position_tpsl": false,
"reduce_only": false,
"order_type": "Limit",
"tif": "Gtc"
}
],
"asks": [
{
"user": "0xe9acfdc9322f6f924f007016c082e6891a3c653c",
"coin": "ETH",
"side": "A",
"limit_px": "3168.0",
"sz": "2.0000",
"oid": 258166160909,
"timestamp": 1764867580000,
"trigger_condition": "N/A",
"is_trigger": false,
"trigger_px": "0",
"is_position_tpsl": false,
"reduce_only": false,
"order_type": "Limit",
"tif": "Gtc"
}
]
}
}

Unterschied (folgende Nachrichten)

Nach dem Snapshot erzeugt jeder Block einen L4BookDiff mit JSON-kodierten inkrementellen Änderungen:

{
"diff": {
"time": 1764867601000,
"height": 817863404,
"data": "{\"order_statuses\": [...], \"book_diffs\": [...]}"
}
}

Anfrageparameter

FeldTypErforderlichBeschreibung
MünzeZeichenketteJaSymbol für das Abonnement – bei Perpetual-Kontrakten werden Namen verwendet (z. B. „BTC“, „ETH“), beim Spot-Handel das @index-Format (z. B. „@142“)

Benennung von Münzen

Die Münze Der Parameter folgt der Namenskonvention Hyperliquid, die Perpetuals eindeutig vom Spot unterscheidet:

  • Unbefristete Verträge: Für Menschen lesbare Namen — „BTC“, „ETH“, „HYPE“, „SOL“
  • Spot-Token: @{index} Format — "@1", „@107“, "@142", "@166"
  • Ergebnismärkte (HIP-4): #N Format. Jedes Ergebnis hat zwei #N Münzen – je eine pro Seite (Ja und Nein). Märkte mit Mehrpreis-Fragen bestehen aus mehreren gruppierten Ergebnissen (Preiskategorien plus einer Ausweichoption), wobei jede Gruppe über ein eigenes Ja/Nein-Münzpaar verfügt. Verwenden Sie die outcomeMeta endpoint Zuordnung von Münzindizes zu Marktbezeichnungen und Seiten.
  • Ausnahme: „PURR/USDC“ ist die einzige Spot-Münze, auf der ein Name zu lesen ist

Es gibt keine Überschneidungen zwischen den Formaten. „BTC“ bezieht sich immer auf den BTC-Perpetual-Kontrakt; der Spot-BTC ist "@142". Um zu entdecken @index Zuordnungen für Spot-Token, Abfrage der Meta oder spotMeta Info-Endpunkte.

Antwortfelder

L4BookUpdate

Jede Nachricht ist eine L4BookUpdate die entweder einen Snapshot oder einen Diff enthält:

FeldTypBeschreibung
MomentaufnahmeL4BookSnapshotVollständige Momentaufnahme des Auftragsbuchs (wird bei Anmeldung, bei Wiederverbindung und als Reset bei einem Wechsel während des laufenden Betriebs gesendet)
diffL4BookDiffInkrementelle Differenz (pro Block zwischen den Snapshots gesendet)

L4BookSnapshot

FeldTypBeschreibung
MünzeZeichenketteSymbol (z. B. „BTC“, „ETH“)
Zeituint64Block-Zeitstempel in Millisekunden
Höheuint64Blockhöhe
GeboteL4Order[]Alle ausstehenden Kaufaufträge
fragtL4Order[]Alle ausstehenden Kaufaufträge

L4BookDiff

FeldTypBeschreibung
Zeituint64Block-Zeitstempel in Millisekunden
Höheuint64Blockhöhe
DatenZeichenketteJSON-kodiertes Objekt, das „order_statuses“ und „book_diffs“ enthält und dem bestehenden Datenformat des Knotens entspricht

L4Order

FeldTypBeschreibung
BenutzerZeichenketteEthereum des Auftraggebers
MünzeZeichenketteBezeichnung des Handelspaares (z. B. „ETH“, „BTC“)
SeiteZeichenkette„A“ (Ask/Verkaufen) oder „B“ (Bid/Kaufen)
limit_pxZeichenketteLimitpreis als Dezimalzeichenfolge
szZeichenketteAuftragsgröße als Dezimalzeichenfolge
oiduint64Eindeutige Bestell-ID
Zeitstempeluint64Zeitpunkt der Erfassung des Auftrags im Buch (Millisekunden)
AuslösebedingungZeichenketteStatus der Auslösebedingung: „N/A“, „Ausgelöst“ usw.
is_triggerboolOb es sich bei der Order um eine Trigger-/Stop-Order handelt
trigger_pxZeichenketteAuslösepreis als Dezimalzeichenfolge
is_position_tpslboolOb es sich bei der Order um eine Take-Profit-/Stop-Loss-Order handelt
nur_reduzierenboolOb es sich um einen reinen Reduktionsbefehl handelt
AuftragstypZeichenketteAuftragsart: „Limit“, „Markt“ usw.
tifZeichenkette (optional)Gültigkeitsdauer: „Gtc“ (Good til Cancelled), „Ioc“ (Immediate or Cancel), „Alo“ (Add Liquidity Only)
KloidZeichenkette (optional)Auftrags-ID des Kunden (vom Benutzer festgelegte individuelle Kennung)

Proto-Definition

StreamL4Book ist definiert in orderbook.proto:

service OrderBookStreaming {
rpc StreamL4Book (L4BookRequest) returns (stream L4BookUpdate);
}

message L4BookRequest {
string coin = 1;
}

message L4BookUpdate {
oneof update {
L4BookSnapshot snapshot = 1;
L4BookDiff diff = 2;
}
}

message L4BookSnapshot {
string coin = 1;
uint64 time = 2;
uint64 height = 3;
repeated L4Order bids = 4;
repeated L4Order asks = 5;
}

message L4BookDiff {
uint64 time = 1;
uint64 height = 2;
string data = 3;
}

message L4Order {
string user = 1;
string coin = 2;
string side = 3;
string limit_px = 4;
string sz = 5;
uint64 oid = 6;
uint64 timestamp = 7;
string trigger_condition = 8;
bool is_trigger = 9;
string trigger_px = 10;
bool is_position_tpsl = 11;
bool reduce_only = 12;
string order_type = 13;
optional string tif = 14;
optional string cloid = 15;
}

Beispiele für Aktualisierungen

L4-Snapshot (anfänglicher vollständiger Zustand)
{
"snapshot": {
"coin": "ETH",
"time": 1764867600518,
"height": 817863403,
"bids": [
{
"user": "0x1c1c270b573d55b68b3d14722b5d5d401511bed0",
"coin": "ETH",
"side": "B",
"limit_px": "3167.4",
"sz": "1.5785",
"oid": 258166296856,
"timestamp": 1764867590000,
"trigger_condition": "N/A",
"is_trigger": false,
"trigger_px": "0",
"is_position_tpsl": false,
"reduce_only": false,
"order_type": "Limit",
"tif": "Gtc"
},
{
"user": "0x999a4b5f268a8fbf33736feff360d462ad248dbf",
"coin": "ETH",
"side": "B",
"limit_px": "3167.0",
"sz": "5.0000",
"oid": 258166123456,
"timestamp": 1764867585000,
"trigger_condition": "N/A",
"is_trigger": false,
"trigger_px": "0",
"is_position_tpsl": false,
"reduce_only": false,
"order_type": "Limit",
"tif": "Gtc",
"cloid": "0x20251204000000000000000000381433"
}
],
"asks": [
{
"user": "0xe9acfdc9322f6f924f007016c082e6891a3c653c",
"coin": "ETH",
"side": "A",
"limit_px": "3168.0",
"sz": "2.0000",
"oid": 258166160909,
"timestamp": 1764867580000,
"trigger_condition": "N/A",
"is_trigger": false,
"trigger_px": "0",
"is_position_tpsl": false,
"reduce_only": false,
"order_type": "Limit",
"tif": "Alo"
}
]
}
}
L4-Diff (inkrementelle Aktualisierung pro Block)
{
"diff": {
"time": 1764867601000,
"height": 817863404,
"data": "{\"order_statuses\":[...],\"book_diffs\":[...]}"
}
}

Die Daten Das Feld ist eine JSON-kodierte Zeichenfolge. Nach der Analyse enthält es:

Bestellstatus — Alle Ereignisse zum Bestellstatus, jeweils eines pro Bestellung, die in diesem Block geändert wurde. Jeder Eintrag entspricht dem Auftragsstrom Ereignisform:

{
"order": {
"coin": "ETH",
"side": "B",
"limitPx": "3167.4",
"sz": "1.5785",
"oid": 258166296856,
"timestamp": 1764867590000,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"tif": "Gtc",
"cloid": "0x...",
"user": null
},
"status": "filled",
"time": "2025-12-04T17:00:00.518000000",
"user": "0x1c1c270b573d55b68b3d14722b5d5d401511bed0"
}

book_diffs — Inkrementelle Änderungen am Auftragsbuch. Jeder Eintrag verwendet dasselbe raw_book_diff Format als das Neuigkeiten zu Büchern Stream:

// New order or size update
{
"coin": "ETH",
"oid": 258166296857,
"px": "3168.0",
"raw_book_diff": { "new": { "sz": "2.0000" } },
"side": "A",
"user": "0xe9acfdc9322f6f924f007016c082e6891a3c653c"
}

// Order removed (cancelled or filled)
{
"coin": "ETH",
"oid": 258166296856,
"px": "3167.4",
"raw_book_diff": "remove",
"side": "B",
"user": "0x1c1c270b573d55b68b3d14722b5d5d401511bed0"
}
Trigger-/Stop-Loss-Order
{
"user": "0x7a475736bf02d67bf51b00414ab766ef4da9214d",
"coin": "BTC",
"side": "A",
"limit_px": "90000.0",
"sz": "0.5000",
"oid": 258166400000,
"timestamp": 1764867595000,
"trigger_condition": "Triggered",
"is_trigger": true,
"trigger_px": "91000.0",
"is_position_tpsl": true,
"reduce_only": true,
"order_type": "Limit",
"tif": "Gtc"
}

API-Nutzung

gRPC
// Perp order book
const request = {
coin: 'ETH'
};

// Spot order book (@ index format)
const spotRequest = {
coin: '@142'
};

gRPC

StreamL4Book ist nur über die gRPC -API verfügbar (OrderBookStreaming Dienst). Er ist nicht über JSON-RPC oder WebSocket verfügbar.

Vergleich: L4-Buch vs. L2-Buch vs. Datensatz „Book Updates“

FunktionStreamL4BookStreamL2BookBUCH_AKTUELLES
GranularitätEinzelbestellungenNach Preisniveau zusammengefasstEinzelne Abweichungen auf Auftragsebene
Beinhaltet den aktuellen StandJa – erster MomentaufnahmeJa – jede NachrichtNein – nur vorwärts
Erfordert REST-BootstrapNeinNeinJa
Verwaltung des Client-StatusDiffs auf Snapshot anwendenKeineVon Grund auf neu erstellen
Details pro BestellungBenutzer, OID, Trigger, Zeitstempel, TIFNur Gesamtgröße und GesamtanzahlBenutzer, OID, Größe
BandbreiteWeiter (vollständige Bestelldetails)Mittel (begrenzt durch n_levels)Niedrig (nur Differenzwerte)
Am besten geeignet fürHFT, Quant-Desks, MEVDie meisten KundenKunden, die lediglich Buchaktualisierungen benötigen

Wichtige Hinweise


  • Behandeln Sie jeden Snapshot als verbindlich: Snapshots gehen bei der Anmeldung und bei der Wiederverbindung ein, und ein Ersatz-Snapshot kann auch nach normalen inkrementellen Aktualisierungen eintreffen (beispielsweise wenn eine ALO-Prioritätsgebühr die Reihenfolge in der Warteschlange verändert). Auf aktiven Märkten können Ersatz-Snapshots mehrmals pro Minute eintreffen. Wann immer ein Snapshot eintrifft, verwerfen Sie das lokale Orderbuch und erstellen Sie es anhand des Snapshots neu.
  • Die Warteschlangenpriorität wird über Snapshots übermittelt, nicht insertBefore: Das Rohmaterial Neuigkeiten zu Büchern Der Stream stellt einen insertBefore Feld bei vorrangigen Einfügungen; L4-Diffs enthalten es nicht. Die streams liefern streams Änderungen in Warteschlangenreihenfolge über Ersatz-Snapshots, deren Gebote und fragt werden in der kanonischen Warteschlangenreihenfolge ausgegeben.
  • Große Nachrichten zulassen: Ersatz-Snapshots enthalten die volle L4-Tiefe und können deutlich größer sein als ein inkrementeller Diff, insbesondere bei BTC. Sehen Sie mindestens 100 MB für eingehende gRPC vor und wenden Sie jeden Snapshot atomar an, bevor Sie spätere Aktualisierungen verarbeiten.
  • DATENVERLUST Wiederanschluss: Der Stream kann gRPC ausgeben DATENVERLUST Statusfehler bei vorübergehenden Störungen. Implementierung einer Logik zur automatischen Wiederherstellung der Verbindung bei DATENVERLUST — Bei jeder neuen Verbindung wird ein aktueller Snapshot bereitgestellt, sodass keine manuelle Wiederherstellung des Zustands erforderlich ist.
  • Änderungen auf den lokalen Zustand anwenden: Wenden Sie zwischen den Snapshots jeweils L4BookDiff um das aktuelle Buch zu pflegen. Jedes book_diffs Verwendungszwecke des Artikels raw_book_diff: {"new": {"sz": "..."}} um eine Bestellung hinzuzufügen/zu aktualisieren, oder raw_book_diff: „entfernen“ um eines zu entfernen, im gleichen Format wie das Neuigkeiten zu Büchern Stream.
  • Alternative in gedruckter Form verfügbar: Wenn Sie lediglich pro Bestellung Bewegungen hinzufügen, aktualisieren oder entfernen möchten, ohne die JSON-kodierten Daten zu analysieren, Daten Zeichenkette, StreamL4BookUpdates liefert dieselben Änderungen auf Order-Ebene wie typisierte Protobuf-Diffs.
  • zstd-Komprimierung wird dringend empfohlen: L4-Nachrichten können aufgrund umfangreicher Bestelldetails sehr groß sein. Aktivieren Sie die zstd-Komprimierung auf Ihrem gRPC , um den Bandbreitenbedarf deutlich zu reduzieren.

  • StreamL2Book - Aggregierte Preisniveaus – einfacher, geringerer Bandbreitenbedarf, keine clientseitige Zustandsverwaltung
  • StreamL4BookUpdates - Typisierte Differenzdaten für das Hinzufügen, Aktualisieren und Entfernen pro Bestellung, kein JSON-Parsing erforderlich
  • Buch-Updates - Nur vorwärtsgerichtete inkrementelle Diffs über StreamData (veralteter Ansatz)
  • Aufträge - Ereignisse im Auftragslebenszyklus (eröffnet, ausgeführt, storniert usw.)
  • Transaktionen - Daten zu ausgeführten Geschäften mit Maker-/Taker-Informationen