docs: add rpc/dlob/candles notes

This commit is contained in:
u1
2026-02-01 21:17:58 +01:00
parent 89415f6793
commit b06fe7f9a4
15 changed files with 2077 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
# 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