reth_node_builder/components/
consensus.rs
1use reth_consensus::{ConsensusError, 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>, Error = ConsensusError>
12 + Clone
13 + Unpin
14 + 'static;
15
16 fn build_consensus(
18 self,
19 ctx: &BuilderContext<Node>,
20 ) -> impl Future<Output = eyre::Result<Self::Consensus>> + Send;
21}
22
23impl<Node, F, Fut, Consensus> ConsensusBuilder<Node> for F
24where
25 Node: FullNodeTypes,
26 Consensus:
27 FullConsensus<PrimitivesTy<Node::Types>, Error = ConsensusError> + Clone + Unpin + 'static,
28 F: FnOnce(&BuilderContext<Node>) -> Fut + Send,
29 Fut: Future<Output = eyre::Result<Consensus>> + Send,
30{
31 type Consensus = Consensus;
32
33 fn build_consensus(
34 self,
35 ctx: &BuilderContext<Node>,
36 ) -> impl Future<Output = eyre::Result<Self::Consensus>> {
37 self(ctx)
38 }
39}