diff --git a/Cargo.lock b/Cargo.lock index 85508ee1b35..385bc912f4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7030,20 +7030,13 @@ name = "reth-interfaces" version = "0.2.0-beta.7" dependencies = [ "auto_impl", - "futures", - "parking_lot 0.12.2", - "rand 0.8.5", "reth-consensus", - "reth-eth-wire-types", "reth-fs-util", "reth-network-api", - "reth-network-types", + "reth-network-p2p", "reth-primitives", "reth-storage-errors", - "secp256k1 0.28.2", "thiserror", - "tokio", - "tracing", ] [[package]] @@ -7218,6 +7211,26 @@ dependencies = [ "tokio", ] +[[package]] +name = "reth-network-p2p" +version = "0.2.0-beta.7" +dependencies = [ + "auto_impl", + "futures", + "parking_lot 0.12.2", + "rand 0.8.5", + "reth-consensus", + "reth-eth-wire-types", + "reth-network-api", + "reth-network-types", + "reth-primitives", + "reth-storage-errors", + "secp256k1 0.28.2", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "reth-network-types" version = "0.2.0-beta.7" diff --git a/Cargo.toml b/Cargo.toml index 7b872c79560..a3ac684920a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,7 @@ members = [ "crates/net/nat/", "crates/net/network-api/", "crates/net/network/", + "crates/net/p2p/", "crates/net/types/", "crates/node-core/", "crates/node/api/", @@ -249,6 +250,7 @@ reth-net-nat = { path = "crates/net/nat" } reth-network = { path = "crates/net/network" } reth-network-api = { path = "crates/net/network-api" } reth-network-types = { path = "crates/net/types" } +reth-network-p2p = { path = "crates/net/p2p" } reth-nippy-jar = { path = "crates/storage/nippy-jar" } reth-node-api = { path = "crates/node/api" } reth-node-builder = { path = "crates/node/builder" } diff --git a/bin/reth/Cargo.toml b/bin/reth/Cargo.toml index b95140aadfa..0bde1f4de8b 100644 --- a/bin/reth/Cargo.toml +++ b/bin/reth/Cargo.toml @@ -134,7 +134,6 @@ min-trace-logs = ["tracing/release_max_level_trace"] optimism = [ "reth-primitives/optimism", - "reth-interfaces/optimism", "reth-rpc/optimism", "reth-provider/optimism", "reth-beacon-consensus/optimism", diff --git a/crates/blockchain-tree/Cargo.toml b/crates/blockchain-tree/Cargo.toml index dc9e13866e3..fae2b373589 100644 --- a/crates/blockchain-tree/Cargo.toml +++ b/crates/blockchain-tree/Cargo.toml @@ -50,4 +50,4 @@ assert_matches.workspace = true [features] test-utils = [] -optimism = ["reth-primitives/optimism", "reth-interfaces/optimism", "reth-provider/optimism"] +optimism = ["reth-primitives/optimism", "reth-provider/optimism"] diff --git a/crates/consensus/beacon/Cargo.toml b/crates/consensus/beacon/Cargo.toml index 659ef02c175..a5cef8e3427 100644 --- a/crates/consensus/beacon/Cargo.toml +++ b/crates/consensus/beacon/Cargo.toml @@ -67,7 +67,6 @@ assert_matches.workspace = true [features] optimism = [ "reth-primitives/optimism", - "reth-interfaces/optimism", "reth-provider/optimism", "reth-blockchain-tree/optimism", "reth-ethereum-consensus/optimism", diff --git a/crates/interfaces/Cargo.toml b/crates/interfaces/Cargo.toml index 4dd845314b7..6aec8a4137f 100644 --- a/crates/interfaces/Cargo.toml +++ b/crates/interfaces/Cargo.toml @@ -14,36 +14,15 @@ workspace = true reth-primitives.workspace = true reth-fs-util.workspace = true reth-network-api.workspace = true -reth-eth-wire-types.workspace = true reth-consensus.workspace = true -reth-network-types.workspace = true reth-storage-errors.workspace = true - -# async -futures.workspace = true -tokio = { workspace = true, features = ["sync"] } +reth-network-p2p.workspace = true # misc auto_impl.workspace = true thiserror.workspace = true -tracing.workspace = true -secp256k1 = { workspace = true, default-features = false, features = [ - "alloc", - "recovery", - "rand", -], optional = true } -parking_lot = { workspace = true, optional = true } -rand = { workspace = true, optional = true } - -[dev-dependencies] -reth-consensus = { workspace = true, features = ["test-utils"] } -parking_lot.workspace = true -rand.workspace = true -tokio = { workspace = true, features = ["full"] } -secp256k1 = { workspace = true, features = ["alloc", "recovery", "rand"] } [features] -test-utils = ["reth-consensus/test-utils", "secp256k1", "rand", "parking_lot"] -clap = ["reth-storage-errors/clap"] -optimism = ["reth-eth-wire-types/optimism"] +test-utils = ["reth-consensus/test-utils", "reth-network-p2p/test-utils"] +clap = ["reth-storage-errors/clap"] \ No newline at end of file diff --git a/crates/interfaces/src/lib.rs b/crates/interfaces/src/lib.rs index a5d38965e2b..bd92f9d8df0 100644 --- a/crates/interfaces/src/lib.rs +++ b/crates/interfaces/src/lib.rs @@ -23,7 +23,7 @@ mod error; pub use error::{RethError, RethResult}; /// P2P traits. -pub mod p2p; +pub use reth_network_p2p as p2p; /// Trie error pub mod trie; @@ -34,6 +34,6 @@ pub mod sync; /// BlockchainTree related traits. pub mod blockchain_tree; -#[cfg(any(test, feature = "test-utils"))] /// Common test helpers for mocking out Consensus, Downloaders and Header Clients. -pub mod test_utils; +#[cfg(feature = "test-utils")] +pub use reth_network_p2p::test_utils; diff --git a/crates/net/network-api/src/lib.rs b/crates/net/network-api/src/lib.rs index 417525b7d4a..10ffddb6a30 100644 --- a/crates/net/network-api/src/lib.rs +++ b/crates/net/network-api/src/lib.rs @@ -1,4 +1,4 @@ -//! Reth network interface definitions. +//! Reth interface definitions and commonly used types for the reth-network crate. //! //! Provides abstractions for the reth-network crate. //! diff --git a/crates/net/p2p/Cargo.toml b/crates/net/p2p/Cargo.toml new file mode 100644 index 00000000000..34705d78e52 --- /dev/null +++ b/crates/net/p2p/Cargo.toml @@ -0,0 +1,48 @@ +[package] +name = "reth-network-p2p" +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +description = "traits and commonly used types for p2p and network communication" + +[lints] +workspace = true + +[dependencies] +reth-primitives.workspace = true +reth-network-api.workspace = true +reth-eth-wire-types.workspace = true +reth-consensus.workspace = true +reth-network-types.workspace = true +reth-storage-errors.workspace = true + +# async +futures.workspace = true +tokio = { workspace = true, features = ["sync"] } + +# misc +auto_impl.workspace = true +thiserror.workspace = true +tracing.workspace = true + +secp256k1 = { workspace = true, default-features = false, features = [ + "alloc", + "recovery", + "rand", +], optional = true } +parking_lot = { workspace = true, optional = true } +rand = { workspace = true, optional = true } + +[dev-dependencies] +reth-consensus = { workspace = true, features = ["test-utils"] } + +parking_lot.workspace = true +rand.workspace = true +tokio = { workspace = true, features = ["full"] } +secp256k1 = { workspace = true, features = ["alloc", "recovery", "rand"] } + +[features] +test-utils = ["reth-consensus/test-utils", "secp256k1", "rand", "parking_lot"] diff --git a/crates/interfaces/src/p2p/bodies/client.rs b/crates/net/p2p/src/bodies/client.rs similarity index 95% rename from crates/interfaces/src/p2p/bodies/client.rs rename to crates/net/p2p/src/bodies/client.rs index 4b7f3366a24..3a36da50016 100644 --- a/crates/interfaces/src/p2p/bodies/client.rs +++ b/crates/net/p2p/src/bodies/client.rs @@ -3,7 +3,7 @@ use std::{ task::{ready, Context, Poll}, }; -use crate::p2p::{download::DownloadClient, error::PeerRequestResult, priority::Priority}; +use crate::{download::DownloadClient, error::PeerRequestResult, priority::Priority}; use futures::{Future, FutureExt}; use reth_primitives::{BlockBody, B256}; diff --git a/crates/interfaces/src/p2p/bodies/downloader.rs b/crates/net/p2p/src/bodies/downloader.rs similarity index 82% rename from crates/interfaces/src/p2p/bodies/downloader.rs rename to crates/net/p2p/src/bodies/downloader.rs index 86a7698ae84..f7f5e9c92eb 100644 --- a/crates/interfaces/src/p2p/bodies/downloader.rs +++ b/crates/net/p2p/src/bodies/downloader.rs @@ -1,5 +1,5 @@ use super::response::BlockResponse; -use crate::p2p::error::DownloadResult; +use crate::error::DownloadResult; use futures::Stream; use reth_primitives::BlockNumber; use std::ops::RangeInclusive; @@ -10,7 +10,7 @@ pub type BodyDownloaderResult = DownloadResult>; /// A downloader capable of fetching and yielding block bodies from block headers. /// /// A downloader represents a distinct strategy for submitting requests to download block bodies, -/// while a [BodiesClient][crate::p2p::bodies::client::BodiesClient] represents a client capable of +/// while a [BodiesClient][crate::bodies::client::BodiesClient] represents a client capable of /// fulfilling these requests. pub trait BodyDownloader: Send + Sync + Stream + Unpin { /// Method for setting the download range. diff --git a/crates/interfaces/src/p2p/bodies/mod.rs b/crates/net/p2p/src/bodies/mod.rs similarity index 100% rename from crates/interfaces/src/p2p/bodies/mod.rs rename to crates/net/p2p/src/bodies/mod.rs diff --git a/crates/interfaces/src/p2p/bodies/response.rs b/crates/net/p2p/src/bodies/response.rs similarity index 100% rename from crates/interfaces/src/p2p/bodies/response.rs rename to crates/net/p2p/src/bodies/response.rs diff --git a/crates/interfaces/src/p2p/download.rs b/crates/net/p2p/src/download.rs similarity index 100% rename from crates/interfaces/src/p2p/download.rs rename to crates/net/p2p/src/download.rs diff --git a/crates/interfaces/src/p2p/either.rs b/crates/net/p2p/src/either.rs similarity index 99% rename from crates/interfaces/src/p2p/either.rs rename to crates/net/p2p/src/either.rs index ed9d50c736f..36e95d487a6 100644 --- a/crates/interfaces/src/p2p/either.rs +++ b/crates/net/p2p/src/either.rs @@ -1,6 +1,6 @@ //! Support for different download types. -use crate::p2p::{ +use crate::{ bodies::client::BodiesClient, download::DownloadClient, headers::client::{HeadersClient, HeadersRequest}, diff --git a/crates/interfaces/src/p2p/error.rs b/crates/net/p2p/src/error.rs similarity index 99% rename from crates/interfaces/src/p2p/error.rs rename to crates/net/p2p/src/error.rs index 1a847b64949..3bd469e6056 100644 --- a/crates/interfaces/src/p2p/error.rs +++ b/crates/net/p2p/src/error.rs @@ -1,11 +1,11 @@ use super::headers::client::HeadersRequest; -use crate::{db::DatabaseError, provider::ProviderError}; use reth_consensus::ConsensusError; use reth_network_api::ReputationChangeKind; use reth_network_types::WithPeerId; use reth_primitives::{ BlockHashOrNumber, BlockNumber, GotExpected, GotExpectedBoxed, Header, B256, }; +use reth_storage_errors::{db::DatabaseError, provider::ProviderError}; use std::ops::RangeInclusive; use thiserror::Error; use tokio::sync::{mpsc, oneshot}; diff --git a/crates/interfaces/src/p2p/full_block.rs b/crates/net/p2p/src/full_block.rs similarity index 99% rename from crates/interfaces/src/p2p/full_block.rs rename to crates/net/p2p/src/full_block.rs index dd8cfff4d4c..997ab74bb89 100644 --- a/crates/interfaces/src/p2p/full_block.rs +++ b/crates/net/p2p/src/full_block.rs @@ -1,5 +1,5 @@ use super::headers::client::HeadersRequest; -use crate::p2p::{ +use crate::{ bodies::client::{BodiesClient, SingleBodyRequest}, error::PeerRequestResult, headers::client::{HeadersClient, SingleHeaderRequest}, @@ -727,11 +727,10 @@ enum RangeResponseResult { #[cfg(test)] mod tests { - use std::ops::Range; - use super::*; use crate::test_utils::TestFullBlockClient; use futures::StreamExt; + use std::ops::Range; #[tokio::test] async fn download_single_full_block() { diff --git a/crates/interfaces/src/p2p/headers/client.rs b/crates/net/p2p/src/headers/client.rs similarity index 96% rename from crates/interfaces/src/p2p/headers/client.rs rename to crates/net/p2p/src/headers/client.rs index cf535530869..5b70aa1e528 100644 --- a/crates/interfaces/src/p2p/headers/client.rs +++ b/crates/net/p2p/src/headers/client.rs @@ -1,4 +1,4 @@ -use crate::p2p::{download::DownloadClient, error::PeerRequestResult, priority::Priority}; +use crate::{download::DownloadClient, error::PeerRequestResult, priority::Priority}; use futures::{Future, FutureExt}; pub use reth_eth_wire_types::BlockHeaders; use reth_primitives::{BlockHashOrNumber, Header, HeadersDirection}; diff --git a/crates/interfaces/src/p2p/headers/downloader.rs b/crates/net/p2p/src/headers/downloader.rs similarity index 95% rename from crates/interfaces/src/p2p/headers/downloader.rs rename to crates/net/p2p/src/headers/downloader.rs index 500a1a1bc84..b52a8487710 100644 --- a/crates/interfaces/src/p2p/headers/downloader.rs +++ b/crates/net/p2p/src/headers/downloader.rs @@ -1,12 +1,12 @@ use super::error::HeadersDownloaderResult; -use crate::p2p::error::{DownloadError, DownloadResult}; +use crate::error::{DownloadError, DownloadResult}; use futures::Stream; use reth_consensus::Consensus; use reth_primitives::{BlockHashOrNumber, SealedHeader, B256}; /// A downloader capable of fetching and yielding block headers. /// /// A downloader represents a distinct strategy for submitting requests to download block headers, -/// while a [HeadersClient][crate::p2p::headers::client::HeadersClient] represents a client capable +/// while a [HeadersClient][crate::headers::client::HeadersClient] represents a client capable /// of fulfilling these requests. /// /// A [HeaderDownloader] is a [Stream] that returns batches of headers. diff --git a/crates/interfaces/src/p2p/headers/error.rs b/crates/net/p2p/src/headers/error.rs similarity index 100% rename from crates/interfaces/src/p2p/headers/error.rs rename to crates/net/p2p/src/headers/error.rs diff --git a/crates/interfaces/src/p2p/headers/mod.rs b/crates/net/p2p/src/headers/mod.rs similarity index 100% rename from crates/interfaces/src/p2p/headers/mod.rs rename to crates/net/p2p/src/headers/mod.rs diff --git a/crates/interfaces/src/p2p/mod.rs b/crates/net/p2p/src/lib.rs similarity index 53% rename from crates/interfaces/src/p2p/mod.rs rename to crates/net/p2p/src/lib.rs index 75f3a8fc4c5..ed20ab849d8 100644 --- a/crates/interfaces/src/p2p/mod.rs +++ b/crates/net/p2p/src/lib.rs @@ -1,3 +1,16 @@ +//! Provides abstractions and commonly used types for p2p. +//! +//! ## Feature Flags +//! +//! - `test-utils`: Export utilities for testing +#![doc( + html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png", + html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256", + issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/" +)] +#![cfg_attr(not(test), warn(unused_crate_dependencies))] +#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] + /// Shared abstractions for downloader implementations. pub mod download; @@ -15,7 +28,7 @@ pub mod full_block; /// [`HeadersClient`]. /// /// [`Consensus`]: reth_consensus::Consensus -/// [`HeadersClient`]: crate::p2p::headers::client::HeadersClient +/// [`HeadersClient`]: crate::headers::client::HeadersClient pub mod headers; /// Error types broadly used by p2p interfaces for any operation which may produce an error when @@ -24,3 +37,7 @@ pub mod error; /// Priority enum for BlockHeader and BlockBody requests pub mod priority; + +/// Common test helpers for mocking out Consensus, Downloaders and Header Clients. +#[cfg(any(test, feature = "test-utils"))] +pub mod test_utils; diff --git a/crates/interfaces/src/p2p/priority.rs b/crates/net/p2p/src/priority.rs similarity index 100% rename from crates/interfaces/src/p2p/priority.rs rename to crates/net/p2p/src/priority.rs diff --git a/crates/interfaces/src/test_utils/bodies.rs b/crates/net/p2p/src/test_utils/bodies.rs similarity index 98% rename from crates/interfaces/src/test_utils/bodies.rs rename to crates/net/p2p/src/test_utils/bodies.rs index 8f0bfcef09f..46bd3ec9b88 100644 --- a/crates/interfaces/src/test_utils/bodies.rs +++ b/crates/net/p2p/src/test_utils/bodies.rs @@ -1,4 +1,4 @@ -use crate::p2p::{ +use crate::{ bodies::client::{BodiesClient, BodiesFut}, download::DownloadClient, error::PeerRequestResult, diff --git a/crates/interfaces/src/test_utils/full_block.rs b/crates/net/p2p/src/test_utils/full_block.rs similarity index 99% rename from crates/interfaces/src/test_utils/full_block.rs rename to crates/net/p2p/src/test_utils/full_block.rs index 95c1c2b3a0f..c0a26539f87 100644 --- a/crates/interfaces/src/test_utils/full_block.rs +++ b/crates/net/p2p/src/test_utils/full_block.rs @@ -1,4 +1,4 @@ -use crate::p2p::{ +use crate::{ bodies::client::BodiesClient, download::DownloadClient, error::PeerRequestResult, diff --git a/crates/interfaces/src/test_utils/generators.rs b/crates/net/p2p/src/test_utils/generators.rs similarity index 98% rename from crates/interfaces/src/test_utils/generators.rs rename to crates/net/p2p/src/test_utils/generators.rs index 506358276c7..9da1429ea51 100644 --- a/crates/interfaces/src/test_utils/generators.rs +++ b/crates/net/p2p/src/test_utils/generators.rs @@ -14,9 +14,6 @@ use std::{ ops::{Range, RangeInclusive}, }; -// TODO(onbjerg): Maybe we should split this off to its own crate, or move the helpers to the -// relevant crates? - /// Returns a random number generator that can be seeded using the `SEED` environment variable. /// /// If `SEED` is not set, a random seed is used. @@ -353,6 +350,7 @@ pub fn random_receipt( ) -> Receipt { let success = rng.gen::(); let logs_count = logs_count.unwrap_or_else(|| rng.gen::()); + #[allow(clippy::needless_update)] // side-effect of optimism fields Receipt { tx_type: transaction.tx_type(), success, @@ -362,10 +360,7 @@ pub fn random_receipt( } else { vec![] }, - #[cfg(feature = "optimism")] - deposit_nonce: None, - #[cfg(feature = "optimism")] - deposit_receipt_version: None, + ..Default::default() } } diff --git a/crates/interfaces/src/test_utils/headers.rs b/crates/net/p2p/src/test_utils/headers.rs similarity index 99% rename from crates/interfaces/src/test_utils/headers.rs rename to crates/net/p2p/src/test_utils/headers.rs index 0272c68d304..354732c2d2f 100644 --- a/crates/interfaces/src/test_utils/headers.rs +++ b/crates/net/p2p/src/test_utils/headers.rs @@ -1,19 +1,6 @@ //! Testing support for headers related interfaces. -use std::{ - fmt, - pin::Pin, - sync::{ - atomic::{AtomicU64, Ordering}, - Arc, - }, - task::{ready, Context, Poll}, -}; - -use futures::{Future, FutureExt, Stream, StreamExt}; -use tokio::sync::Mutex; - -use crate::p2p::{ +use crate::{ download::DownloadClient, error::{DownloadError, DownloadResult, PeerRequestResult, RequestError}, headers::{ @@ -23,9 +10,20 @@ use crate::p2p::{ }, priority::Priority, }; +use futures::{Future, FutureExt, Stream, StreamExt}; use reth_consensus::{test_utils::TestConsensus, Consensus}; use reth_network_types::{PeerId, WithPeerId}; use reth_primitives::{Header, HeadersDirection, SealedHeader}; +use std::{ + fmt, + pin::Pin, + sync::{ + atomic::{AtomicU64, Ordering}, + Arc, + }, + task::{ready, Context, Poll}, +}; +use tokio::sync::Mutex; /// A test downloader which just returns the values that have been pushed to it. #[derive(Debug)] diff --git a/crates/interfaces/src/test_utils/mod.rs b/crates/net/p2p/src/test_utils/mod.rs similarity index 100% rename from crates/interfaces/src/test_utils/mod.rs rename to crates/net/p2p/src/test_utils/mod.rs diff --git a/crates/node-core/Cargo.toml b/crates/node-core/Cargo.toml index b0ed1fae159..c24060943a8 100644 --- a/crates/node-core/Cargo.toml +++ b/crates/node-core/Cargo.toml @@ -104,7 +104,6 @@ assert_matches.workspace = true [features] optimism = [ "reth-primitives/optimism", - "reth-interfaces/optimism", "reth-rpc/optimism", "reth-rpc-engine-api/optimism", "reth-provider/optimism", diff --git a/crates/optimism/evm/Cargo.toml b/crates/optimism/evm/Cargo.toml index 5af74476117..f9008dc37f3 100644 --- a/crates/optimism/evm/Cargo.toml +++ b/crates/optimism/evm/Cargo.toml @@ -37,7 +37,6 @@ reth-revm = { workspace = true, features = ["test-utils"] } optimism = [ "reth-primitives/optimism", "reth-provider/optimism", - "reth-interfaces/optimism", "revm-primitives/optimism", "reth-optimism-consensus/optimism", ] diff --git a/crates/storage/provider/Cargo.toml b/crates/storage/provider/Cargo.toml index 4fe4ffbb959..52f41c7f80c 100644 --- a/crates/storage/provider/Cargo.toml +++ b/crates/storage/provider/Cargo.toml @@ -65,4 +65,4 @@ rand.workspace = true [features] test-utils = ["alloy-rlp", "reth-db/test-utils", "reth-nippy-jar/test-utils"] -optimism = ["reth-primitives/optimism", "reth-interfaces/optimism"] +optimism = ["reth-primitives/optimism"]