kabu_core_components/
node.rs

1use crate::traits::{
2    BroadcasterBuilder, EstimatorBuilder, ExecutorBuilder, HealthMonitorBuilder, MarketBuilder, MergerBuilder, MonitoringBuilder,
3    NetworkBuilder, PoolBuilder, SignerBuilder, StrategyBuilder, WebServerBuilder,
4};
5
6/// Kabu node types configuration
7pub trait KabuNodeTypes: Clone + Send + Sync + 'static {
8    /// The state type for the node
9    type State: Clone + Send + Sync + 'static;
10}
11
12/// Trait for defining a complete Kabu node configuration
13pub trait KabuNode<N: KabuNodeTypes>: KabuNodeTypes + Clone {
14    /// The type that builds the node's components
15    type ComponentsBuilder: KabuNodeComponentsBuilder<N>;
16
17    /// Returns a [`KabuNodeComponentsBuilder`] for the node
18    fn components_builder(&self) -> Self::ComponentsBuilder;
19}
20
21/// Trait for Kabu node components builder configuration
22pub trait KabuNodeComponentsBuilder<N: KabuNodeTypes>: Clone + Send + Sync + 'static {
23    /// Pool/mempool builder type
24    type Pool: PoolBuilder<N::State>;
25    /// Network connectivity builder type
26    type Network: NetworkBuilder<N::State>;
27    /// Transaction executor/router builder type
28    type Executor: ExecutorBuilder<N::State>;
29    /// MEV strategy builder type (arbitrage, liquidation, etc.)
30    type Strategy: StrategyBuilder<N::State>;
31    /// Transaction signer builder type
32    type Signer: SignerBuilder<N::State>;
33    /// Market data builder type (pools, tokens, prices)
34    type Market: MarketBuilder<N::State>;
35    /// Transaction broadcaster builder type (flashbots, mempool)
36    type Broadcaster: BroadcasterBuilder<N::State>;
37    /// Gas/profit estimator builder type
38    type Estimator: EstimatorBuilder<N::State>;
39    /// Health monitoring builder type
40    type HealthMonitor: HealthMonitorBuilder<N::State>;
41    /// Merger builder type (combines strategies/paths)
42    type Merger: MergerBuilder<N::State>;
43    /// Web server builder type
44    type WebServer: WebServerBuilder<N::State>;
45    /// Monitoring builder type (metrics, influxdb)
46    type Monitoring: MonitoringBuilder<N::State>;
47
48    /// Build and return all component builders
49    fn build_components(self) -> KabuComponentsSet<N::State, Self, N>;
50}
51
52/// Extension trait for adding node configuration to a builder
53pub trait WithKabuNode<B> {
54    /// Configure the builder with a Kabu node
55    fn node<N>(self, node: N) -> B
56    where
57        N: KabuNode<N> + KabuNodeTypes;
58}
59
60/// Set of all Kabu component builders
61pub struct KabuComponentsSet<State, Builder, N>
62where
63    N: KabuNodeTypes<State = State>,
64    Builder: KabuNodeComponentsBuilder<N>,
65{
66    pub pool: Builder::Pool,
67    pub network: Builder::Network,
68    pub executor: Builder::Executor,
69    pub strategy: Builder::Strategy,
70    pub signer: Builder::Signer,
71    pub market: Builder::Market,
72    pub broadcaster: Builder::Broadcaster,
73    pub estimator: Builder::Estimator,
74    pub health_monitor: Builder::HealthMonitor,
75    pub merger: Builder::Merger,
76    pub web_server: Builder::WebServer,
77    pub monitoring: Builder::Monitoring,
78    pub _phantom: std::marker::PhantomData<N>,
79}
80
81/// Default implementation of KabuNodeComponentsBuilder
82#[derive(Clone)]
83pub struct DefaultKabuNodeComponentsBuilder<
84    Pool,
85    Network,
86    Executor,
87    Strategy,
88    Signer,
89    Market,
90    Broadcaster,
91    Estimator,
92    HealthMonitor,
93    Merger,
94    WebServer,
95    Monitoring,
96> {
97    pool: Pool,
98    network: Network,
99    executor: Executor,
100    strategy: Strategy,
101    signer: Signer,
102    market: Market,
103    broadcaster: Broadcaster,
104    estimator: Estimator,
105    health_monitor: HealthMonitor,
106    merger: Merger,
107    web_server: WebServer,
108    monitoring: Monitoring,
109}
110
111impl<Pool, Network, Executor, Strategy, Signer, Market, Broadcaster, Estimator, HealthMonitor, Merger, WebServer, Monitoring, N>
112    KabuNodeComponentsBuilder<N>
113    for DefaultKabuNodeComponentsBuilder<
114        Pool,
115        Network,
116        Executor,
117        Strategy,
118        Signer,
119        Market,
120        Broadcaster,
121        Estimator,
122        HealthMonitor,
123        Merger,
124        WebServer,
125        Monitoring,
126    >
127where
128    N: KabuNodeTypes,
129    Pool: PoolBuilder<N::State> + Clone + Send + Sync + 'static,
130    Network: NetworkBuilder<N::State> + Clone + Send + Sync + 'static,
131    Executor: ExecutorBuilder<N::State> + Clone + Send + Sync + 'static,
132    Strategy: StrategyBuilder<N::State> + Clone + Send + Sync + 'static,
133    Signer: SignerBuilder<N::State> + Clone + Send + Sync + 'static,
134    Market: MarketBuilder<N::State> + Clone + Send + Sync + 'static,
135    Broadcaster: BroadcasterBuilder<N::State> + Clone + Send + Sync + 'static,
136    Estimator: EstimatorBuilder<N::State> + Clone + Send + Sync + 'static,
137    HealthMonitor: HealthMonitorBuilder<N::State> + Clone + Send + Sync + 'static,
138    Merger: MergerBuilder<N::State> + Clone + Send + Sync + 'static,
139    WebServer: WebServerBuilder<N::State> + Clone + Send + Sync + 'static,
140    Monitoring: MonitoringBuilder<N::State> + Clone + Send + Sync + 'static,
141{
142    type Pool = Pool;
143    type Network = Network;
144    type Executor = Executor;
145    type Strategy = Strategy;
146    type Signer = Signer;
147    type Market = Market;
148    type Broadcaster = Broadcaster;
149    type Estimator = Estimator;
150    type HealthMonitor = HealthMonitor;
151    type Merger = Merger;
152    type WebServer = WebServer;
153    type Monitoring = Monitoring;
154
155    fn build_components(self) -> KabuComponentsSet<N::State, Self, N> {
156        KabuComponentsSet {
157            pool: self.pool,
158            network: self.network,
159            executor: self.executor,
160            strategy: self.strategy,
161            signer: self.signer,
162            market: self.market,
163            broadcaster: self.broadcaster,
164            estimator: self.estimator,
165            health_monitor: self.health_monitor,
166            merger: self.merger,
167            web_server: self.web_server,
168            monitoring: self.monitoring,
169            _phantom: std::marker::PhantomData,
170        }
171    }
172}