reth_node_builder/components/
mod.rs1mod builder;
11mod consensus;
12mod execute;
13mod network;
14mod payload;
15mod pool;
16
17pub use builder::*;
18pub use consensus::*;
19pub use execute::*;
20pub use network::*;
21pub use payload::*;
22pub use pool::*;
23
24use crate::{ConfigureEvm, FullNodeTypes};
25use reth_consensus::{ConsensusError, FullConsensus};
26use reth_network::types::NetPrimitivesFor;
27use reth_network_api::FullNetwork;
28use reth_node_api::{NodeTypes, PrimitivesTy, TxTy};
29use reth_payload_builder::PayloadBuilderHandle;
30use reth_transaction_pool::{PoolPooledTx, PoolTransaction, TransactionPool};
31use std::fmt::Debug;
32
33pub trait NodeComponents<T: FullNodeTypes>: Clone + Debug + Unpin + Send + Sync + 'static {
39 type Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<T::Types>>> + Unpin;
41
42 type Evm: ConfigureEvm<Primitives = <T::Types as NodeTypes>::Primitives>;
44
45 type Consensus: FullConsensus<<T::Types as NodeTypes>::Primitives, Error = ConsensusError>
47 + Clone
48 + Unpin
49 + 'static;
50
51 type Network: FullNetwork<Primitives: NetPrimitivesFor<<T::Types as NodeTypes>::Primitives>>;
53
54 fn pool(&self) -> &Self::Pool;
56
57 fn evm_config(&self) -> &Self::Evm;
59
60 fn consensus(&self) -> &Self::Consensus;
62
63 fn network(&self) -> &Self::Network;
65
66 fn payload_builder_handle(&self) -> &PayloadBuilderHandle<<T::Types as NodeTypes>::Payload>;
69}
70
71#[derive(Debug)]
75pub struct Components<Node: FullNodeTypes, Network, Pool, EVM, Consensus> {
76 pub transaction_pool: Pool,
78 pub evm_config: EVM,
80 pub consensus: Consensus,
82 pub network: Network,
84 pub payload_builder_handle: PayloadBuilderHandle<<Node::Types as NodeTypes>::Payload>,
86}
87
88impl<Node, Pool, EVM, Cons, Network> NodeComponents<Node>
89 for Components<Node, Network, Pool, EVM, Cons>
90where
91 Node: FullNodeTypes,
92 Network: FullNetwork<
93 Primitives: NetPrimitivesFor<
94 PrimitivesTy<Node::Types>,
95 PooledTransaction = PoolPooledTx<Pool>,
96 >,
97 >,
98 Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
99 + Unpin
100 + 'static,
101 EVM: ConfigureEvm<Primitives = PrimitivesTy<Node::Types>> + 'static,
102 Cons:
103 FullConsensus<PrimitivesTy<Node::Types>, Error = ConsensusError> + Clone + Unpin + 'static,
104{
105 type Pool = Pool;
106 type Evm = EVM;
107 type Consensus = Cons;
108 type Network = Network;
109
110 fn pool(&self) -> &Self::Pool {
111 &self.transaction_pool
112 }
113
114 fn evm_config(&self) -> &Self::Evm {
115 &self.evm_config
116 }
117
118 fn consensus(&self) -> &Self::Consensus {
119 &self.consensus
120 }
121
122 fn network(&self) -> &Self::Network {
123 &self.network
124 }
125
126 fn payload_builder_handle(&self) -> &PayloadBuilderHandle<<Node::Types as NodeTypes>::Payload> {
127 &self.payload_builder_handle
128 }
129}
130
131impl<Node, N, Pool, EVM, Cons> Clone for Components<Node, N, Pool, EVM, Cons>
132where
133 N: Clone,
134 Node: FullNodeTypes,
135 Pool: TransactionPool,
136 EVM: ConfigureEvm,
137 Cons: Clone,
138{
139 fn clone(&self) -> Self {
140 Self {
141 transaction_pool: self.transaction_pool.clone(),
142 evm_config: self.evm_config.clone(),
143 consensus: self.consensus.clone(),
144 network: self.network.clone(),
145 payload_builder_handle: self.payload_builder_handle.clone(),
146 }
147 }
148}