# Mevnode Bot Architecture ## Zasada glowna `mevnode_bot` nigdy nie uruchamia warstwy Solana node: - bez `agave` - bez `ledger` - bez `yellowstone server` - bez validator stack `mevnode_sol` pozostaje jedynym hostem node-level: - `agave-validator` - `yellowstone geyser plugin` - `yellowstone gRPC` - plugin metrics - lokalny RPC - opcjonalnie pozniej RPC proxy ## Schemat `mevnode_bot` ```text +--------------------------------------------------------------+ | mevnode_bot | | single-node k3s only | | | | ingress/web | | - frontend | | - api | | | | trading/read | | - yellowstone-consumer | | - market ingest / parser | | - dlob-worker | | | | trading/core | | - strategy-engine | | - risk-manager | | - order-manager | | - tx-router | | | | tx paths | | - tpu client | | - jito client | | - rpc client / later rpc proxy target on mevnode_sol | | | | data | | - postgres | | - redis optional | | - clickhouse later optional | | | | ops | | - prometheus | | - grafana | | - loki optional | | | | platform | | - argo/flux | | - sealed-secrets or sops | | - internal registry access | +--------------------------------------------------------------+ ``` ## Przeplyw danych ```text Yellowstone on mevnode_sol | v yellowstone-consumer | v parser / ingest / dlob-worker | v strategy-engine | v risk-manager / order-manager | v tx-router | | | v v v TPU Jito RPC ``` ## Namespace plan - `web` - `trade` - `data` - `ops` - `infra` ## Kolejnosc wdrozenia 1. `web`: `frontend`, `api` 2. `data`: `postgres` 3. `trade`: `yellowstone-consumer` 4. `trade`: `strategy-engine`, `tx-router` 5. `ops`: `prometheus`, `grafana` ## Read i write path Read path: - `mevnode_bot -> wg0 -> mevnode_sol:10000` Metrics path: - `mevnode_bot -> wg0 -> mevnode_sol:8999` Write path pozniej: - `mevnode_bot -> TPU/Jito` - albo `mevnode_bot -> RPC proxy -> mevnode_sol:127.0.0.1:8899` ## Zasada architektoniczna - `mevnode_sol` = source of truth dla chain access - `mevnode_bot` = execution and product node ## K3s object map ### Namespace `web` - `Deployment` `frontend` - `Service` `frontend` typu `ClusterIP` - `Deployment` `api` - `Service` `api` typu `ClusterIP` - `Ingress` `web` Przeznaczenie: - `frontend` wystawia UI - `api` wystawia backend HTTP - `Ingress` publikuje tylko web entrypoint ### Namespace `trade` - `Deployment` `yellowstone-consumer` - `Deployment` `dlob-worker` - `Deployment` `strategy-engine` - `Deployment` `risk-manager` - `Deployment` `order-manager` - `Deployment` `tx-router` - `Service` `strategy-engine` typu `ClusterIP` jesli inne komponenty maja sie do niego odwolywac - `Service` `tx-router` typu `ClusterIP` tylko jesli potrzebne bedzie sterowanie po HTTP/gRPC Przeznaczenie: - `yellowstone-consumer` czyta stream z `mevnode_sol` - `dlob-worker` robi ingest i przygotowanie danych - `strategy-engine` podejmuje decyzje - `risk-manager` egzekwuje limity - `order-manager` sklada i nadzoruje lifecycle zlecen - `tx-router` wybiera `TPU`, `Jito` albo `RPC` Uwagi: - `strategy-engine`, `order-manager` i `tx-router` mozna uruchamiac z `hostNetwork: true`, jesli bedzie potrzeba minimalizacji narzutu sieciowego - `yellowstone-consumer` powinien miec `Secret` z `x-token` i endpointem `10.91.0.1:10000` ### Namespace `data` - `StatefulSet` `postgres` - `Service` `postgres` typu `ClusterIP` - `PersistentVolumeClaim` dla `postgres` - `StatefulSet` `redis` opcjonalnie - `Service` `redis` typu `ClusterIP` - `PersistentVolumeClaim` dla `redis` tylko jesli ma byc trwaly cache - `StatefulSet` `clickhouse` dopiero pozniej - `Service` `clickhouse` typu `ClusterIP` - `PersistentVolumeClaim` dla `clickhouse` Przeznaczenie: - `postgres` dla stanu systemu, pozycji, filli, konfiguracji i jobow - `redis` dla cache, kolejek, lockow i rate limitu - `clickhouse` dla ciezszej analityki i archiwizacji eventow ### Namespace `ops` - `StatefulSet` `prometheus` - `Service` `prometheus` typu `ClusterIP` - `Deployment` `grafana` - `Service` `grafana` typu `ClusterIP` - `Deployment` `promtail` opcjonalnie - `StatefulSet` albo `Deployment` `loki` opcjonalnie Przeznaczenie: - `prometheus` zbiera metryki z `k3s` i z aplikacji - `grafana` daje dashboardy - `loki/promtail` sa opcjonalne do logow ### Namespace `infra` - `Deployment` `argocd-server` albo kontrolery `flux` - `Deployment` `argocd-repo-server` jesli wybierzemy `Argo CD` - `Deployment` `sealed-secrets-controller` albo integracja `sops` - `Secret` / `ExternalSecret` dla tokenow i kluczy Przeznaczenie: - GitOps sync z Gitea - zarzadzanie sekretami - bootstrap aplikacji i manifestow ## Service exposure rules - tylko `frontend` i `api` wychodza przez `Ingress` - `postgres`, `redis`, `clickhouse`, `strategy-engine`, `tx-router` zostaja wewnetrzne jako `ClusterIP` - bez `LoadBalancer` - bez publicznego wystawiania komponentow tradingowych - `yellowstone-consumer` nie potrzebuje publicznego `Service` ## Storage rules - `postgres` na trwaƂym wolumenie - `clickhouse` tylko na szybkim lokalnym storage - `redis` bez PVC jesli ma byc tylko cache - aplikacje tradingowe jako stateless `Deployment`, jesli stan trzymamy w `postgres` ## Config and secrets - `ConfigMap` dla endpointow, feature flags i runtime config - `Secret` dla: - tokenu Yellowstone - kluczy API - danych do `postgres` - danych do `Jito` - kluczy signing/delegate ## Kolejnosc wdrozenia w k3s 1. `infra`: GitOps i secrets 2. `data`: `postgres` 3. `web`: `frontend`, `api`, `Ingress` 4. `trade`: `yellowstone-consumer` 5. `trade`: `strategy-engine`, `risk-manager`, `order-manager` 6. `trade`: `tx-router` 7. `ops`: `prometheus`, `grafana`