Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions dash-spv/src/client/chainlock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ impl<
.await
{
// Penalize the peer that relayed the invalid ChainLock
let reason = format!("Invalid ChainLock: {}", e);
let _ = self.network.penalize_last_message_peer_invalid_chainlock(&reason).await;
let _ = self.network.penalize_last_message_peer_invalid_chainlock().await;
return Err(SpvError::Validation(e));
}
}
Expand Down Expand Up @@ -111,7 +110,7 @@ impl<
tracing::warn!("{}", reason);

// Ban the peer using the reputation system
let _ = self.network.penalize_last_message_peer_invalid_instantlock(&reason).await;
let _ = self.network.penalize_last_message_peer_invalid_instantlock().await;

return Err(SpvError::Validation(e));
}
Expand Down
14 changes: 0 additions & 14 deletions dash-spv/src/client/queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,6 @@ impl<
self.network.peer_count()
}

/// Disconnect a specific peer.
pub async fn disconnect_peer(&self, addr: &std::net::SocketAddr, reason: &str) -> Result<()> {
// Cast network manager to PeerNetworkManager to access disconnect_peer
let network = self
.network
.as_any()
.downcast_ref::<crate::network::manager::PeerNetworkManager>()
.ok_or_else(|| {
SpvError::Config("Network manager does not support peer disconnection".to_string())
})?;

network.disconnect_peer(addr, reason).await
}

// ============ Masternode Queries ============

/// Get a reference to the masternode list engine.
Expand Down
159 changes: 53 additions & 106 deletions dash-spv/src/network/manager.rs

Large diffs are not rendered by default.

30 changes: 8 additions & 22 deletions dash-spv/src/network/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub mod handshake;
pub mod manager;
pub mod peer;
pub mod pool;
pub mod reputation;
mod reputation;

#[cfg(test)]
mod tests;
Expand All @@ -17,13 +17,14 @@ pub mod mock;

use async_trait::async_trait;

use crate::error::NetworkResult;
use crate::{error::NetworkResult, network::reputation::ReputationChangeReason};
use dashcore::network::message::NetworkMessage;
use dashcore::BlockHash;

pub use handshake::{HandshakeManager, HandshakeState};
pub use manager::PeerNetworkManager;
pub use peer::Peer;
pub use reputation::PeerReputation;

/// Network manager trait for abstracting network operations.
#[async_trait]
Expand Down Expand Up @@ -129,33 +130,18 @@ pub trait NetworkManager: Send + Sync {
/// Default implementation is a no-op for managers without reputation.
async fn penalize_last_message_peer(
&self,
_score_change: i32,
_reason: &str,
_reason: ReputationChangeReason,
) -> NetworkResult<()> {
Ok(())
}

/// Convenience: penalize last peer for an invalid ChainLock.
async fn penalize_last_message_peer_invalid_chainlock(
&self,
reason: &str,
) -> NetworkResult<()> {
self.penalize_last_message_peer(
crate::network::reputation::misbehavior_scores::INVALID_CHAINLOCK,
reason,
)
.await
async fn penalize_last_message_peer_invalid_chainlock(&self) -> NetworkResult<()> {
self.penalize_last_message_peer(ReputationChangeReason::InvalidChainLock).await
}

/// Convenience: penalize last peer for an invalid InstantLock.
async fn penalize_last_message_peer_invalid_instantlock(
&self,
reason: &str,
) -> NetworkResult<()> {
self.penalize_last_message_peer(
crate::network::reputation::misbehavior_scores::INVALID_INSTANTLOCK,
reason,
)
.await
async fn penalize_last_message_peer_invalid_instantlock(&self) -> NetworkResult<()> {
self.penalize_last_message_peer(ReputationChangeReason::InvalidInstantLock).await
}
}
Loading
Loading