3.5 KiB
3.5 KiB
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, WS8900, gRPC10000
- WG subnet (np.
- Polityka dostępu:
- allowlist IP do SSH
- czy gRPC wymaga auth/token dla klientów
- Retencja danych (start):
- TS: 7 dni “gęsto” (np. 1–5s) + czy robimy downsample 1m na dłużej
- Model intent:
- potwierdzone: offset (ticks/bps) + desired-state (jest w
doc/drift-perp-contract.md)
- potwierdzone: offset (ticks/bps) + desired-state (jest w
- 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
- indeksy
- Archiver/collector:
- worker, który zapisuje TS (z
*_latestdo*_ts), albo rozszerzenie istniejących workerów
- worker, który zapisuje TS (z
- Downsample (opcjonalnie, ale pro):
- continuous aggregates (Timescale) lub job 1m/5m
- Hasura bootstrap:
- track tabel TS + uprawnienia
select(public) dla UI history
- track tabel TS + uprawnienia
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
decisiondobot_events, bez składania tx
- buduje features i zapisuje
- 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”
- jeden plik
- 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”
- walidator JSON schema
E) UI (warstwy + live/history, bez liczenia w JS)
- Tryb Live/History:
- Live: subscriptions na
*_latest - History: query na
*_ts+ timeframetf
- Live: subscriptions na
- 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” zbot_events
- panel “Contracts” z
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
- w k3s: secret
- 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-publisherbez reconnect storm
- przejście krok po kroku wg