Files
trade-doc/rpc/geyser-dlob.md

80 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Geyser (Yellowstone gRPC) + Drift DLOB
Ten dokument jest “praktycznym mostem” między:
- **RPC boxem** (bare metal) z `agave/solana-validator` i pluginem **Geyser/Yellowstone gRPC**,
- a **VPS** (k3s), gdzie działa **Drift DLOB** (publisher + redis + server + statsy).
Cel: realtime feed “prosto z noda” (gRPC), bez wystawiania RPC publicznie.
## Założenia sieciowe (must-have)
- Bare metal ↔ VPS po **WireGuard**.
- Porty RPC/WS/gRPC dostępne **tylko** po WG (albo bind do WG IP + firewall).
- Publicznie nie wystawiamy:
- Solana RPC/WS,
- Yellowstone gRPC,
- Redis.
## Porty (typowe)
To nie są twarde wymagania, ale typowy setup wygląda tak:
- Solana JSON-RPC HTTP: `8899`
- Solana pubsub WS: `8900`
- Yellowstone gRPC: `10000`
## Jak to mapuje się na env (VPS)
W `trade-staging` trzymaj endpointy jako secrety i wstrzykuj do podów:
- `ENDPOINT=http://<rpc_wg_ip>:8899`
- `WS_ENDPOINT=ws://<rpc_wg_ip>:8900`
- `GRPC_ENDPOINT=http://<rpc_wg_ip>:10000`
- `TOKEN=...` (jeśli włączasz auth w Yellowstone)
Uwaga:
- W naszym kodzie `dlob-publisher` w trybie gRPC używa gRPC głównie do `OrderSubscriber`.
DriftClient (accountSubscriber) nadal polega na WS/polling (gRPC dla driftClient jest w kodzie wyłączone),
więc **WS endpoint nadal musi działać**.
- Dla `OrderSubscriber` w trybie gRPC mamy lokalny auto-reconnect. Jeśli Yellowstone zamknie stream albo zwroci `14 UNAVAILABLE: Connection dropped`, publisher nie powinien juz wychodzic z `exit 1`; zamiast tego czyści stream i probuje wznowic subskrypcje. Backoff jest sterowany przez `GRPC_RECONNECT_DELAY_MS` i domyslnie wynosi `1000 ms`.
## DLOB: zalecana konfiguracja na start (2 markety)
Przykład ustawień dla `dlob-publisher`:
- `ENV=mainnet-beta`
- `PERP_MARKETS_TO_LOAD=0,75` (2 markety)
- `USE_ORDER_SUBSCRIBER=true`
- `USE_WEBSOCKET=true` (dla DriftClient / slotów)
- `USE_GRPC=true`
- `GRPC_CLIENT=yellowstone`
- `GRPC_ENDPOINT=...`
- `TOKEN=...` (jeśli wymagany)
- (opcjonalnie) `DISABLE_GPA_REFRESH=true` (żeby zmniejszyć polling)
Jeśli po drodze okaże się, że gRPC jest niestabilne, nadal możesz wrócić do trybu WS:
- wyłącz `USE_GRPC` i zostaw `USE_WEBSOCKET=true`.
Ale operacyjnie najpierw warto sprawdzic logi reconnectu, bo krotkie dropy streamu powinny byc teraz obslugiwane bez restartu poda.
## Minimalne testy “czy działa”
Z perspektywy VPS:
1) Sprawdź, czy gRPC port jest osiągalny po WG (np. TCP connect do `10000`).
2) W logach `dlob-publisher` powinno być widoczne, że `useGrpc: true` (albo analogiczna flaga).
3) Metryki DLOB powinny pokazywać rosnące liczniki updateów (publisher) oraz świeże sloty.
## Co to daje vs zwykły RPC/WS
- Niższa latencja i stabilniejszy stream zmian kont (szczególnie, gdy klientów WS jest dużo).
- Mniej “pchania” ciężkich subskrypcji przez publiczny RPC.
Co to nie rozwiązuje:
- “Pamięciożerności” DLOB jako takiej (stan orderbooka i user map rośnie z rynkami i aktywnością).
- Wymaga nadal rozsądnej konfiguracji rynku (na start: mała lista marketów).