Skip to content

Commit

Permalink
refactor(peer): Move PeerInfo to own file
Browse files Browse the repository at this point in the history
  • Loading branch information
Sword-Smith committed Jan 31, 2025
1 parent 50752a1 commit 050071d
Show file tree
Hide file tree
Showing 10 changed files with 115 additions and 106 deletions.
2 changes: 1 addition & 1 deletion src/bin/dashboard_src/peers_screen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use std::sync::Mutex;
use std::time::Duration;

use itertools::Itertools;
use neptune_cash::models::peer::PeerInfo;
use neptune_cash::models::peer::peer_info::PeerInfo;
use neptune_cash::rpc_auth;
use neptune_cash::rpc_server::RPCClient;
use ratatui::layout::Constraint;
Expand Down
2 changes: 1 addition & 1 deletion src/connect_to_peers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -554,9 +554,9 @@ mod connect_tests {
use super::*;
use crate::config_models::cli_args;
use crate::config_models::network::Network;
use crate::models::peer::peer_info::PeerInfo;
use crate::models::peer::InternalConnectionStatus;
use crate::models::peer::NegativePeerSanction;
use crate::models::peer::PeerInfo;
use crate::models::peer::PeerMessage;
use crate::models::peer::PeerStanding;
use crate::prelude::twenty_first;
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ use futures::StreamExt;
use models::blockchain::block::Block;
use models::blockchain::shared::Hash;
use models::peer::handshake_data::HandshakeData;
use models::peer::PeerInfo;
use models::peer::peer_info::PeerInfo;
use prelude::tasm_lib;
use prelude::triton_vm;
use prelude::twenty_first;
Expand Down
2 changes: 1 addition & 1 deletion src/main_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ use crate::models::channel::MinerToMain;
use crate::models::channel::PeerTaskToMain;
use crate::models::channel::RPCServerToMain;
use crate::models::peer::handshake_data::HandshakeData;
use crate::models::peer::peer_info::PeerInfo;
use crate::models::peer::transaction_notification::TransactionNotification;
use crate::models::peer::PeerInfo;
use crate::models::peer::PeerSynchronizationState;
use crate::models::proof_abstractions::tasm::program::TritonVmProofJobOptions;
use crate::models::state::block_proposal::BlockProposal;
Expand Down
96 changes: 1 addition & 95 deletions src/models/peer.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
pub(crate) mod handshake_data;
pub mod peer_block_notifications;
pub mod peer_info;
pub mod transaction_notification;
pub mod transfer_block;
pub mod transfer_transaction;
Expand Down Expand Up @@ -49,101 +50,6 @@ pub(crate) type InstanceId = u128;
pub(crate) const SYNC_CHALLENGE_POW_WITNESS_LENGTH: usize = 10;
pub(crate) const SYNC_CHALLENGE_NUM_BLOCK_PAIRS: usize = 10;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub(crate) struct PeerConnectionInfo {
port_for_incoming_connections: Option<u16>,
connected_address: SocketAddr,
inbound: bool,
}

impl PeerConnectionInfo {
pub(crate) fn new(
port_for_incoming_connections: Option<u16>,
connected_address: SocketAddr,
inbound: bool,
) -> Self {
Self {
port_for_incoming_connections,
connected_address,
inbound,
}
}
}

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct PeerInfo {
peer_connection_info: PeerConnectionInfo,
instance_id: InstanceId,
connection_established: SystemTime,
pub(crate) standing: PeerStanding,
version: String,
is_archival_node: bool,
}

impl PeerInfo {
pub(crate) fn new(
peer_connection_info: PeerConnectionInfo,
instance_id: InstanceId,
connection_established: SystemTime,
version: String,
is_archival_node: bool,
peer_tolerance: u16,
) -> Self {
assert!(peer_tolerance > 0, "Peer tolerance must be positive");
let standing = PeerStanding::new(peer_tolerance);
Self {
peer_connection_info,
instance_id,
connection_established,
standing,
version,
is_archival_node,
}
}

pub(crate) fn with_standing(mut self, standing: PeerStanding) -> Self {
self.standing = standing;
self
}

pub(crate) fn instance_id(&self) -> u128 {
self.instance_id
}

pub fn standing(&self) -> PeerStanding {
self.standing
}

pub fn connected_address(&self) -> SocketAddr {
self.peer_connection_info.connected_address
}

pub fn connection_established(&self) -> SystemTime {
self.connection_established
}

pub fn is_archival_node(&self) -> bool {
self.is_archival_node
}

pub(crate) fn connection_is_inbound(&self) -> bool {
self.peer_connection_info.inbound
}

/// Return the socket address that the peer is expected to listen on. Returns `None` if peer does not accept
/// incoming connections.
pub fn listen_address(&self) -> Option<SocketAddr> {
self.peer_connection_info
.port_for_incoming_connections
.map(|port| SocketAddr::new(self.peer_connection_info.connected_address.ip(), port))
}

#[cfg(test)]
pub(crate) fn set_connection_established(&mut self, new_timestamp: SystemTime) {
self.connection_established = new_timestamp;
}
}

trait Sanction {
fn severity(self) -> i32;
}
Expand Down
103 changes: 103 additions & 0 deletions src/models/peer/peer_info.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
use std::net::SocketAddr;
use std::time::SystemTime;

use serde::Deserialize;
use serde::Serialize;

use super::InstanceId;
use super::PeerStanding;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub(crate) struct PeerConnectionInfo {
port_for_incoming_connections: Option<u16>,
connected_address: SocketAddr,
inbound: bool,
}

impl PeerConnectionInfo {
pub(crate) fn new(
port_for_incoming_connections: Option<u16>,
connected_address: SocketAddr,
inbound: bool,
) -> Self {
Self {
port_for_incoming_connections,
connected_address,
inbound,
}
}
}

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct PeerInfo {
peer_connection_info: PeerConnectionInfo,
instance_id: InstanceId,
connection_established: SystemTime,
pub(crate) standing: PeerStanding,
version: String,
is_archival_node: bool,
}

impl PeerInfo {
pub(crate) fn new(
peer_connection_info: PeerConnectionInfo,
instance_id: InstanceId,
connection_established: SystemTime,
version: String,
is_archival_node: bool,
peer_tolerance: u16,
) -> Self {
assert!(peer_tolerance > 0, "Peer tolerance must be positive");
let standing = PeerStanding::new(peer_tolerance);
Self {
peer_connection_info,
instance_id,
connection_established,
standing,
version,
is_archival_node,
}
}

pub(crate) fn with_standing(mut self, standing: PeerStanding) -> Self {
self.standing = standing;
self
}

pub(crate) fn instance_id(&self) -> u128 {
self.instance_id
}

pub fn standing(&self) -> PeerStanding {
self.standing
}

pub fn connected_address(&self) -> SocketAddr {
self.peer_connection_info.connected_address
}

pub fn connection_established(&self) -> SystemTime {
self.connection_established
}

pub fn is_archival_node(&self) -> bool {
self.is_archival_node
}

pub(crate) fn connection_is_inbound(&self) -> bool {
self.peer_connection_info.inbound
}

/// Return the socket address that the peer is expected to listen on. Returns `None` if peer does not accept
/// incoming connections.
pub fn listen_address(&self) -> Option<SocketAddr> {
self.peer_connection_info
.port_for_incoming_connections
.map(|port| SocketAddr::new(self.peer_connection_info.connected_address.ip(), port))
}

#[cfg(test)]
pub(crate) fn set_connection_established(&mut self, new_timestamp: SystemTime) {
self.connection_established = new_timestamp;
}
}
4 changes: 2 additions & 2 deletions src/models/state/networking_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ use crate::database::WriteBatchAsync;
use crate::models::blockchain::block::block_height::BlockHeight;
use crate::models::blockchain::block::difficulty_control::ProofOfWork;
use crate::models::database::PeerDatabases;
use crate::models::peer;
use crate::models::peer::peer_info::PeerInfo;
use crate::models::peer::PeerStanding;

pub const BANNED_IPS_DB_NAME: &str = "banned_ips";

type PeerMap = HashMap<SocketAddr, peer::PeerInfo>;
type PeerMap = HashMap<SocketAddr, PeerInfo>;

/// Information about a foreign tip towards which the client is syncing.
#[derive(Debug, Clone, Eq, PartialEq)]
Expand Down
4 changes: 2 additions & 2 deletions src/peer_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ use crate::models::channel::MainToPeerTask;
use crate::models::channel::PeerTaskToMain;
use crate::models::channel::PeerTaskToMainTransaction;
use crate::models::peer::handshake_data::HandshakeData;
use crate::models::peer::peer_info::PeerConnectionInfo;
use crate::models::peer::peer_info::PeerInfo;
use crate::models::peer::transfer_block::TransferBlock;
use crate::models::peer::BlockProposalRequest;
use crate::models::peer::BlockRequestBatch;
use crate::models::peer::IssuedSyncChallenge;
use crate::models::peer::MutablePeerState;
use crate::models::peer::NegativePeerSanction;
use crate::models::peer::PeerConnectionInfo;
use crate::models::peer::PeerInfo;
use crate::models::peer::PeerMessage;
use crate::models::peer::PeerSanction;
use crate::models::peer::PeerStanding;
Expand Down
2 changes: 1 addition & 1 deletion src/rpc_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ use crate::models::blockchain::transaction::TransactionProof;
use crate::models::blockchain::type_scripts::native_currency_amount::NativeCurrencyAmount;
use crate::models::channel::ClaimUtxoData;
use crate::models::channel::RPCServerToMain;
use crate::models::peer::peer_info::PeerInfo;
use crate::models::peer::InstanceId;
use crate::models::peer::PeerInfo;
use crate::models::peer::PeerStanding;
use crate::models::proof_abstractions::timestamp::Timestamp;
use crate::models::state::mining_status::MiningStatus;
Expand Down
4 changes: 2 additions & 2 deletions src/tests/shared.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ use crate::models::channel::PeerTaskToMain;
use crate::models::database::BlockIndexKey;
use crate::models::database::BlockIndexValue;
use crate::models::database::PeerDatabases;
use crate::models::peer::PeerConnectionInfo;
use crate::models::peer::PeerInfo;
use crate::models::peer::peer_info::PeerConnectionInfo;
use crate::models::peer::peer_info::PeerInfo;
use crate::models::peer::PeerMessage;
use crate::models::proof_abstractions::mast_hash::MastHash;
use crate::models::proof_abstractions::timestamp::Timestamp;
Expand Down

0 comments on commit 050071d

Please sign in to comment.