Files
trade-frontend/doc/todo-before-baremetal.md
2026-02-01 21:44:45 +01:00

3.5 KiB
Raw Blame History

TODO przed zakupem bare metal (RPC+Geyser) — żeby dzień 0 poszedł gładko

Cel: zanim kupisz bare metal, dopinamy wszystko, co nie wymaga własnego RPC, żeby po zakupie:

  • tylko postawić RPC+Geyser wg runbooka,
  • przepiąć endpointy w k3s i zrobić rollout,
  • zweryfikować stabilność feedu i gotowość do live.

A) Decyzje i parametry (bez kodu, ale blokują implementację)

  • Docelowe porty i adresacja WireGuard:
    • WG subnet (np. 10.8.0.0/24), IP bare metal i IP k3s/VPS
    • port WG (np. 51820/udp)
    • private bind dla: RPC 8899, WS 8900, gRPC 10000
  • Polityka dostępu:
    • allowlist IP do SSH
    • czy gRPC wymaga auth/token dla klientów
  • Retencja danych (start):
    • TS: 7 dni “gęsto” (np. 15s) + czy robimy downsample 1m na dłużej
  • Model intent:
    • potwierdzone: offset (ticks/bps) + desired-state (jest w doc/drift-perp-contract.md)
  • Ryzyko (hard caps):
    • max position USD, max reprices/min, max slippage/spread, freshness

B) Dane i historia (żeby warstwy działały live+history)

  • DLOB TS tables: dlob_stats_ts, dlob_depth_bps_ts, dlob_slippage_ts
    • indeksy (market_name, ts) i retencja 7 dni
  • Archiver/collector:
    • worker, który zapisuje TS (z *_latest do *_ts), albo rozszerzenie istniejących workerów
  • Downsample (opcjonalnie, ale pro):
    • continuous aggregates (Timescale) lub job 1m/5m
  • Hasura bootstrap:
    • track tabel TS + uprawnienia select (public) dla UI history

C) Kontrakty bota i audyt (must-have przed live)

  • Schema:
    • bot_contracts (desired-state + status)
    • bot_events (audit log)
    • mapowanie: decision_id, client_order_id, drift_order_id, tx_sig
  • Observe-only executor (k3s):
    • buduje features i zapisuje decision do bot_events, bez składania tx
  • Reconcile logic (no trade yet):
    • start → odczyt observed state z Drift → porównanie do DB → log “diff”
  • Kill-switch w executorze:
    • env var + DB flag + safety triggers (feed stale, RPC lag)

D) Vast (GPU tylko na kilka godzin) — przygotowanie pod ephemeral training

  • Dataset export (z k3s/DB):
    • jeden plik parquet/jsonl.zst + dataset_version (hash)
    • minimalny “train split / eval split”
  • Training entrypoint (jedna komenda):
    • skrypt/komenda, która: download dataset → train → eval → export
  • Artifact upload:
    • preferowane: scp na VPS/k3s albo Gitea Packages
    • wersjonowanie: model_version + dataset_version
  • Predictor contract test:
    • walidator JSON schema trade_intent
    • test: “intent TTL expired” + “gates fail” + “panic”

E) UI (warstwy + live/history, bez liczenia w JS)

  • Tryb Live/History:
    • Live: subscriptions na *_latest
    • History: query na *_ts + timeframe tf
  • Warstwy/Panele z doc/stats.md:
    • mapowanie 1:1 na tabele (brak obliczeń w UI)
  • Podgląd kontraktów:
    • panel “Contracts” z bot_contracts + “Event timeline” z bot_events

F) Operacje (żeby bare metal nie stał się snowflake)

  • Sekrety i endpointy:
    • w k3s: secret trade-dlob-rpc / analogiczny na nowy endpoint (WG)
    • fallback endpoint (np. public provider) jako opcjonalny drugi URL
  • Monitoring/alerty na k3s:
    • freshness DLOB/ticks, error rate workerów, restart loops
  • Checklist “Day 0”:
    • przejście krok po kroku wg doc/solana-rpc-geyser-setup.md
    • smoke test: dlob-publisher bez reconnect storm