🗺️ RPC map · workspace view

Where each RPC flows, and which Cargo crate owns each feature. Click any feature or RPC node for how it’s used and why.

loading runtime state…
Helius poolShyft poolChainstack poolMoralis APIfarm-hunter serviceHelius + Shyft pass through rpc-gateway; other APIs go direct
monitoring crateobservers & watchers
master (binary root)orchestrator + cross-feature
Helius pool
WSS logsSubscribe + RPC
Shyft pool
RPC + CEX WSS · own budget
Chainstack pool
RPC + WSS · key in path
Moralis API
pump.fun graduated
farm-hunter service
localhost:3010 · REST
rpc-gateway crate
Solana RPC choke-point · per-key budget
  • ws_pool · multiplexed WSS
  • rpc_queue · HTTP RPC workers
  • solana · CEX-monitor WSS
  • token_tracker · per-wallet tracking
  • debug_log + failure_log
Inversion hooks installed by master ↑ — feature crates never import master.
Farm Monitorⓘfarm_monitor
Mini-tradesⓘtop_one_farms
Cex Monitorⓘsolana + webhook
Farm breakdownⓘfarm_breakdown
Get farm addressesⓘfarm_addresses
Balance checkersⓘbalance_checker (+farm)
Transaction loggerⓘtransaction_logger
Safety checksⓘsafety::routes()
Farm-hunter scoresⓘfarm_hunter (client)
Token trackerⓘtoken_tracker · SSE
Pump.fun graduatedⓘpump_graduated

Workspace structure

One binary, one process — the crates enforce a compile-time dependency DAG, not separate services.
sharedleaf types
←
rpc-gatewayall Solana RPC/WSS + hooks
←
monitoringobservers/watchers
←
master (binary)api.rs · main · supervisors

Why split?

The split enforces module boundaries at the compiler level: rpc-gateway can't import a feature, and no crate may import one above it. Upward calls go through OnceLock hooks that master installs at startup (CEX resolver, farm_addresses lookups, etc).

What stayed shared?

Helius + Shyft pool state lives in ws_pool and rpc_queue as process-wide OnceLocks inside rpc-gateway. Per-key credit budgets stay coordinated because every feature crate goes through the same gateway code — no key gets double-spent.

Not microservices.

Still one cargo run --bin nattbakka-v2 process, one Axum server on :3000, one systemd/pm2 entry. Shared in-memory state, no network hop between "services". The boundary is structural, not operational.