Skip to content

Commit

Permalink
network: Sync peerstore constants between libp2p and litep2p (parityt…
Browse files Browse the repository at this point in the history
…ech#4906)

Counterpart of: paritytech#4031

cc @paritytech/networking

---------

Signed-off-by: Alexandru Vasile <[email protected]>
Co-authored-by: Sebastian Kunert <[email protected]>
  • Loading branch information
lexnv and skunert authored Jun 28, 2024
1 parent 31986a6 commit aaf0443
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions substrate/client/network/src/litep2p/peerstore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,20 @@ use std::{
const LOG_TARGET: &str = "sub-libp2p::peerstore";

/// We don't accept nodes whose reputation is under this value.
pub const BANNED_THRESHOLD: i32 = 82 * (i32::MIN / 100);
pub const BANNED_THRESHOLD: i32 = 71 * (i32::MIN / 100);

/// Relative decrement of a reputation value that is applied every second. I.e., for inverse
/// decrement of 50 we decrease absolute value of the reputation by 1/50. This corresponds to a
/// factor of `k = 0.98`. It takes ~ `ln(0.5) / ln(k)` seconds to reduce the reputation by half,
/// or 34.3 seconds for the values above. In this setup the maximum allowed absolute value of
/// `i32::MAX` becomes 0 in ~1100 seconds (actually less due to integer arithmetic).
const INVERSE_DECREMENT: i32 = 50;
/// decrement of 200 we decrease absolute value of the reputation by 1/200.
///
/// This corresponds to a factor of `k = 0.995`, where k = 1 - 1 / INVERSE_DECREMENT.
///
/// It takes ~ `ln(0.5) / ln(k)` seconds to reduce the reputation by half, or 138.63 seconds for the
/// values above.
///
/// In this setup:
/// - `i32::MAX` becomes 0 in exactly 3544 seconds, or approximately 59 minutes
/// - `i32::MIN` escapes the banned threshold in 69 seconds
const INVERSE_DECREMENT: i32 = 200;

/// Amount of time between the moment we last updated the [`PeerStore`] entry and the moment we
/// remove it, once the reputation value reaches 0.
Expand Down Expand Up @@ -362,7 +368,7 @@ mod tests {
#[test]
fn decaying_max_reputation_finally_yields_zero() {
const INITIAL_REPUTATION: i32 = i32::MAX;
const SECONDS: u64 = 1000;
const SECONDS: u64 = 3544;

let mut peer_info = PeerInfo::default();
peer_info.reputation = INITIAL_REPUTATION;
Expand All @@ -377,7 +383,7 @@ mod tests {
#[test]
fn decaying_min_reputation_finally_yields_zero() {
const INITIAL_REPUTATION: i32 = i32::MIN;
const SECONDS: u64 = 1000;
const SECONDS: u64 = 3544;

let mut peer_info = PeerInfo::default();
peer_info.reputation = INITIAL_REPUTATION;
Expand Down

0 comments on commit aaf0443

Please sign in to comment.