reth_node_builder/components/
consensus.rs1use reth_node_api::NodeTypes;
3
4use crate::{BuilderContext, FullNodeTypes};
5use std::future::Future;
6
7pub trait ConsensusBuilder<Node: FullNodeTypes>: Send {
9 type Consensus: reth_consensus::FullConsensus<<Node::Types as NodeTypes>::Primitives>
11 + Clone
12 + Unpin
13 + 'static;
14
15 fn build_consensus(
17 self,
18 ctx: &BuilderContext<Node>,
19 ) -> impl Future<Output = eyre::Result<Self::Consensus>> + Send;
20}
21
22impl<Node, F, Fut, Consensus> ConsensusBuilder<Node> for F
23where
24 Node: FullNodeTypes,
25 Consensus: reth_consensus::FullConsensus<<Node::Types as NodeTypes>::Primitives>
26 + Clone
27 + Unpin
28 + 'static,
29 F: FnOnce(&BuilderContext<Node>) -> Fut + Send,
30 Fut: Future<Output = eyre::Result<Consensus>> + Send,
31{
32 type Consensus = Consensus;
33
34 fn build_consensus(
35 self,
36 ctx: &BuilderContext<Node>,
37 ) -> impl Future<Output = eyre::Result<Self::Consensus>> {
38 self(ctx)
39 }
40}