diff --git a/crates/net/eth-wire-types/src/primitives.rs b/crates/net/eth-wire-types/src/primitives.rs index 3a9ba27865..e02ccbdadb 100644 --- a/crates/net/eth-wire-types/src/primitives.rs +++ b/crates/net/eth-wire-types/src/primitives.rs @@ -3,6 +3,7 @@ use alloy_consensus::{RlpDecodableReceipt, RlpEncodableReceipt, TxReceipt}; use alloy_rlp::{Decodable, Encodable}; use core::fmt::Debug; +use reth_ethereum_primitives::{EthPrimitives, PooledTransactionVariant}; use reth_primitives_traits::{Block, BlockBody, BlockHeader, NodePrimitives, SignedTransaction}; /// Abstraction over primitive types which might appear in network messages. See @@ -62,16 +63,23 @@ where { } -/// Network primitive types used by Ethereum networks. +/// Basic implementation of [`NetworkPrimitives`] combining [`NodePrimitives`] and a pooled +/// transaction. #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub struct EthNetworkPrimitives; +pub struct BasicNetworkPrimitives(core::marker::PhantomData<(N, Pooled)>); -impl NetworkPrimitives for EthNetworkPrimitives { - type BlockHeader = alloy_consensus::Header; - type BlockBody = reth_ethereum_primitives::BlockBody; - type Block = reth_ethereum_primitives::Block; - type BroadcastedTransaction = reth_ethereum_primitives::TransactionSigned; - type PooledTransaction = reth_ethereum_primitives::PooledTransactionVariant; - type Receipt = reth_ethereum_primitives::Receipt; +impl NetworkPrimitives for BasicNetworkPrimitives +where + N: NodePrimitives, + Pooled: SignedTransaction + TryFrom + 'static, +{ + type BlockHeader = N::BlockHeader; + type BlockBody = N::BlockBody; + type Block = N::Block; + type BroadcastedTransaction = N::SignedTx; + type PooledTransaction = Pooled; + type Receipt = N::Receipt; } + +/// Network primitive types used by Ethereum networks. +pub type EthNetworkPrimitives = BasicNetworkPrimitives; diff --git a/crates/optimism/node/src/node.rs b/crates/optimism/node/src/node.rs index 3fa32ebd42..14e878b22d 100644 --- a/crates/optimism/node/src/node.rs +++ b/crates/optimism/node/src/node.rs @@ -11,7 +11,7 @@ use op_alloy_rpc_types_engine::OpPayloadAttributes; use reth_chainspec::{ChainSpecProvider, EthChainSpec, Hardforks}; use reth_evm::{ConfigureEvm, EvmFactory, EvmFactoryFor}; use reth_network::{ - primitives::NetPrimitivesFor, NetworkConfig, NetworkHandle, NetworkManager, NetworkPrimitives, + types::BasicNetworkPrimitives, NetworkConfig, NetworkHandle, NetworkManager, NetworkPrimitives, PeersInfo, }; use reth_node_api::{ @@ -39,7 +39,7 @@ use reth_optimism_payload_builder::{ config::{OpBuilderConfig, OpDAConfig}, OpBuiltPayload, OpPayloadBuilderAttributes, OpPayloadPrimitives, }; -use reth_optimism_primitives::{DepositReceipt, OpPrimitives, OpReceipt, OpTransactionSigned}; +use reth_optimism_primitives::{DepositReceipt, OpPrimitives, OpTransactionSigned}; use reth_optimism_rpc::{ eth::{ext::OpEthExtApi, OpEthApiBuilder}, miner::{MinerApiExtServer, OpMinerExtApi}, @@ -57,8 +57,8 @@ use reth_rpc_eth_types::error::FromEvmError; use reth_rpc_server_types::RethRpcModule; use reth_tracing::tracing::{debug, info}; use reth_transaction_pool::{ - blobstore::DiskFileBlobStore, CoinbaseTipOrdering, EthPoolTransaction, PoolTransaction, - TransactionPool, TransactionValidationTaskExecutor, + blobstore::DiskFileBlobStore, CoinbaseTipOrdering, EthPoolTransaction, PoolPooledTx, + PoolTransaction, TransactionPool, TransactionValidationTaskExecutor, }; use reth_trie_db::MerklePatriciaTrie; use revm::context::TxEnv; @@ -880,40 +880,37 @@ where /// A basic optimism network builder. #[derive(Debug, Default)] -pub struct OpNetworkBuilder { +pub struct OpNetworkBuilder { /// Disable transaction pool gossip pub disable_txpool_gossip: bool, /// Disable discovery v4 pub disable_discovery_v4: bool, - /// Marker for the network primitives type - _np: PhantomData, - /// Marker for the pooled transaction type - _pt: PhantomData, } -impl Clone for OpNetworkBuilder { +impl Clone for OpNetworkBuilder { fn clone(&self) -> Self { Self::new(self.disable_txpool_gossip, self.disable_discovery_v4) } } -impl OpNetworkBuilder { +impl OpNetworkBuilder { /// Creates a new `OpNetworkBuilder`. pub const fn new(disable_txpool_gossip: bool, disable_discovery_v4: bool) -> Self { - Self { disable_txpool_gossip, disable_discovery_v4, _np: PhantomData, _pt: PhantomData } + Self { disable_txpool_gossip, disable_discovery_v4 } } } -impl OpNetworkBuilder { +impl OpNetworkBuilder { /// Returns the [`NetworkConfig`] that contains the settings to launch the p2p network. /// /// This applies the configured [`OpNetworkBuilder`] settings. - pub fn network_config( + pub fn network_config( &self, ctx: &BuilderContext, - ) -> eyre::Result::Provider, NetworkP>> + ) -> eyre::Result> where Node: FullNodeTypes>, + NetworkP: NetworkPrimitives, { let Self { disable_txpool_gossip, disable_discovery_v4, .. } = self.clone(); let args = &ctx.config().network; @@ -952,22 +949,15 @@ impl OpNetworkBuilder } } -impl NetworkBuilder - for OpNetworkBuilder +impl NetworkBuilder for OpNetworkBuilder where Node: FullNodeTypes>, - Pool: TransactionPool< - Transaction: PoolTransaction, Pooled = PooledTx>, - > + Unpin + Pool: TransactionPool>> + + Unpin + 'static, - NetworkP: NetworkPrimitives< - PooledTransaction = PooledTx, - BroadcastedTransaction = <::Primitives as NodePrimitives>::SignedTx - > - + NetPrimitivesFor>, - PooledTx: Send, { - type Network = NetworkHandle; + type Network = + NetworkHandle, PoolPooledTx>>; async fn build_network( self, @@ -1029,15 +1019,4 @@ where } /// Network primitive types used by Optimism networks. -#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub struct OpNetworkPrimitives; - -impl NetworkPrimitives for OpNetworkPrimitives { - type BlockHeader = alloy_consensus::Header; - type BlockBody = alloy_consensus::BlockBody; - type Block = alloy_consensus::Block; - type BroadcastedTransaction = OpTransactionSigned; - type PooledTransaction = OpPooledTransaction; - type Receipt = OpReceipt; -} +pub type OpNetworkPrimitives = BasicNetworkPrimitives; diff --git a/crates/primitives-traits/src/receipt.rs b/crates/primitives-traits/src/receipt.rs index a8d632c356..3e2e64ad92 100644 --- a/crates/primitives-traits/src/receipt.rs +++ b/crates/primitives-traits/src/receipt.rs @@ -5,6 +5,7 @@ use alloc::vec::Vec; use alloy_consensus::{ Eip2718EncodableReceipt, RlpDecodableReceipt, RlpEncodableReceipt, TxReceipt, Typed2718, }; +use alloy_rlp::{Decodable, Encodable}; use core::fmt; /// Helper trait that unifies all behaviour required by receipt to support full node operations. @@ -23,6 +24,8 @@ pub trait Receipt: + TxReceipt + RlpEncodableReceipt + RlpDecodableReceipt + + Encodable + + Decodable + Eip2718EncodableReceipt + Typed2718 + MaybeSerde diff --git a/examples/custom-node/src/lib.rs b/examples/custom-node/src/lib.rs index abf477bd6f..6cbf8f93db 100644 --- a/examples/custom-node/src/lib.rs +++ b/examples/custom-node/src/lib.rs @@ -8,8 +8,7 @@ #![cfg_attr(not(test), warn(unused_crate_dependencies))] use crate::{ - evm::CustomExecutorBuilder, network::CustomNetworkPrimitives, pool::CustomPooledTransaction, - primitives::CustomTransaction, + evm::CustomExecutorBuilder, pool::CustomPooledTransaction, primitives::CustomTransaction, }; use chainspec::CustomChainSpec; use primitives::CustomNodePrimitives; @@ -50,7 +49,7 @@ where N, OpPoolBuilder>, BasicPayloadServiceBuilder, - OpNetworkBuilder, + OpNetworkBuilder, CustomExecutorBuilder, OpConsensusBuilder, >;