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

95 lines
3.5 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.

# 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