diff --git a/Cargo.lock b/Cargo.lock index 7eee737879..8e1c5ef60d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4123,6 +4123,7 @@ dependencies = [ "reth-consensus", "reth-interfaces", "reth-network", + "reth-network-api", "reth-primitives", "reth-provider", "reth-rpc-api", diff --git a/crates/net/network-api/src/lib.rs b/crates/net/network-api/src/lib.rs index 374f994ea6..ea14a3ac6b 100644 --- a/crates/net/network-api/src/lib.rs +++ b/crates/net/network-api/src/lib.rs @@ -11,8 +11,16 @@ use std::net::SocketAddr; -/// Provides general purpose information about the network +/// Provides general purpose information about the network. pub trait NetworkInfo: Send + Sync { /// Returns the [`SocketAddr`] that listens for incoming connections. fn local_addr(&self) -> SocketAddr; } + +/// Provides general purpose information about Peers in the network. +pub trait PeersInfo: Send + Sync { + /// Returns how many peers the network is currently connected to. + /// + /// Note: this should only include established connections and _not_ ongoing attempts. + fn num_connected_peers(&self) -> usize; +} diff --git a/crates/net/network/src/network.rs b/crates/net/network/src/network.rs index 5333a169d3..f7e2b92abd 100644 --- a/crates/net/network/src/network.rs +++ b/crates/net/network/src/network.rs @@ -13,7 +13,7 @@ use reth_interfaces::{ sync::{SyncState, SyncStateProvider, SyncStateUpdater}, }; use reth_net_common::bandwidth_meter::BandwidthMeter; -use reth_network_api::NetworkInfo; +use reth_network_api::{NetworkInfo, PeersInfo}; use reth_primitives::{PeerId, TransactionSigned, TxHash, H256, U256}; use std::{ net::SocketAddr, @@ -60,11 +60,6 @@ impl NetworkHandle { Self { inner: Arc::new(inner) } } - /// How many peers we're currently connected to. - pub fn num_connected_peers(&self) -> usize { - self.inner.num_active_peers.load(Ordering::Relaxed) - } - /// Returns the [`PeerId`] used in the network. pub fn peer_id(&self) -> &PeerId { &self.inner.local_peer_id @@ -208,6 +203,12 @@ impl NetworkHandle { // === API Implementations === +impl PeersInfo for NetworkHandle { + fn num_connected_peers(&self) -> usize { + self.inner.num_active_peers.load(Ordering::Relaxed) + } +} + impl NetworkInfo for NetworkHandle { fn local_addr(&self) -> SocketAddr { *self.inner.listener_address.lock() diff --git a/crates/net/network/tests/it/connect.rs b/crates/net/network/tests/it/connect.rs index 08fe64a95b..b84dff4837 100644 --- a/crates/net/network/tests/it/connect.rs +++ b/crates/net/network/tests/it/connect.rs @@ -14,7 +14,7 @@ use reth_interfaces::{ }; use reth_net_common::ban_list::BanList; use reth_network::{NetworkConfig, NetworkEvent, NetworkManager, PeersConfig}; -use reth_network_api::NetworkInfo; +use reth_network_api::{NetworkInfo, PeersInfo}; use reth_primitives::{HeadersDirection, NodeRecord, PeerId}; use reth_provider::test_utils::NoopProvider; use reth_transaction_pool::test_utils::testing_pool; diff --git a/crates/net/rpc/Cargo.toml b/crates/net/rpc/Cargo.toml index ffffe1f5ce..b18ce299df 100644 --- a/crates/net/rpc/Cargo.toml +++ b/crates/net/rpc/Cargo.toml @@ -17,6 +17,7 @@ reth-rpc-types = { path = "../rpc-types" } reth-provider = { path = "../../storage/provider" } reth-transaction-pool = { path = "../../transaction-pool" } reth-network = { path = "../network" } +reth-network-api = { path = "../network-api" } reth-consensus = { path = "../../consensus", features = ["serde"] } # rpc diff --git a/crates/net/rpc/src/net/mod.rs b/crates/net/rpc/src/net/mod.rs index 89218eeae6..826652f8a5 100644 --- a/crates/net/rpc/src/net/mod.rs +++ b/crates/net/rpc/src/net/mod.rs @@ -1,6 +1,7 @@ use crate::eth::EthApiSpec; use jsonrpsee::core::RpcResult as Result; use reth_network::NetworkHandle; +use reth_network_api::PeersInfo; use reth_rpc_api::NetApiServer; use reth_rpc_types::PeerCount;