//! This example shows how implement a custom node. //! //! A node consists of: //! - primitives: block,header,transactions //! - components: network,pool,evm //! - engine: advances the node #![cfg_attr(not(test), warn(unused_crate_dependencies))] use chainspec::CustomChainSpec; use engine::CustomPayloadTypes; use primitives::CustomNodePrimitives; use reth_ethereum::node::api::{FullNodeTypes, NodeTypes}; use reth_node_builder::{components::ComponentsBuilder, Node, NodeComponentsBuilder}; use reth_op::node::{ node::{OpConsensusBuilder, OpPoolBuilder, OpStorage}, OpNode, }; pub mod chainspec; pub mod engine; pub mod engine_api; pub mod evm; pub mod network; pub mod primitives; #[derive(Debug, Clone)] pub struct CustomNode {} impl NodeTypes for CustomNode { type Primitives = CustomNodePrimitives; type ChainSpec = CustomChainSpec; type StateCommitment = ::StateCommitment; type Storage = ::Storage; type Payload = CustomPayloadTypes; } impl Node for CustomNode where N: FullNodeTypes< Types: NodeTypes< Payload = CustomPayloadTypes, ChainSpec = CustomChainSpec, Primitives = CustomNodePrimitives, Storage = OpStorage, >, >, ComponentsBuilder: NodeComponentsBuilder, { type ComponentsBuilder = ComponentsBuilder; type AddOns = (); fn components_builder(&self) -> Self::ComponentsBuilder { ComponentsBuilder::default() .node_types::() .pool(OpPoolBuilder::default()) .consensus(OpConsensusBuilder::default()) } fn add_ons(&self) -> Self::AddOns {} }