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