Skip to content
Open
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: 5 additions & 0 deletions config/src/comments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,11 @@ seeds = [\"95.217.197.180:3517\",\"5.161.127.56:3414\",\"5.75.242.4:3414\",\"5.7
# A preferred dandelion_peer, mainly used for testing dandelion
# dandelion_peer = \"10.0.0.1:13144\"


# minimum version for other peers that can connect
peer_min_major = 3
peer_min_minor = 4

"
.to_string(),
);
Expand Down
4 changes: 3 additions & 1 deletion edna.toml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ seeding_type = "DNSSeed"
# A preferred dandelion_peer, mainly used for testing dandelion
# dandelion_peer = "10.0.0.1:13144"

peer_min_major = 3
peer_min_minor = 4

[server.p2p_config.capabilities]
bits = 31

Expand Down Expand Up @@ -213,4 +216,3 @@ log_max_size = 16777216

#maximum count of the log files to rotate over
log_max_files = 32

27 changes: 24 additions & 3 deletions p2p/src/peers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,30 @@ impl Peers {
last_connected: Utc::now().timestamp(),
local_timestamp: Utc::now().timestamp(),
};
debug!("Saving newly connected peer {}.", peer_data.addr);
self.save_peer(&peer_data)?;
peers.insert(peer_data.addr, peer.clone());

let version_agent: String = peer_data.user_agent.chars().skip(8).collect();
let version_numbers: Vec<&str> = version_agent.split(".").collect();
let agent_major_version: u32 = version_numbers[0].parse().unwrap();
let agent_minor_version: u32 = version_numbers[1].parse().unwrap();

if agent_major_version >= self.config.peer_min_major()
&& agent_minor_version >= self.config.peer_min_minor()
{
debug!(
"Saving newly connected peer {} - {}.",
peer_data.addr, peer_data.user_agent
);
self.save_peer(&peer_data)?;
peers.insert(peer_data.addr, peer.clone());
} else {
debug!(
"Peer version to old {:?} - {:?}. Require min version {}.{}",
peer_data.addr,
peer.info.user_agent,
self.config.peer_min_major(),
self.config.peer_min_minor()
);
};

Ok(())
}
Expand Down
28 changes: 28 additions & 0 deletions p2p/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ const PEER_MIN_PREFERRED_OUTBOUND_COUNT: u32 = 8;
/// than allowed by PEER_MAX_INBOUND_COUNT to encourage network bootstrapping.
const PEER_LISTENER_BUFFER_COUNT: u32 = 8;

/// The minimum Major version a peer must have
pub const PEER_MIN_MAJOR: u32 = 3;

/// The minimum Minor version a peer must have
pub const PEER_MIN_MINOR: u32 = 4;

#[derive(Debug)]
pub enum Error {
Serialization(ser::Error),
Expand Down Expand Up @@ -241,6 +247,10 @@ pub struct P2PConfig {
pub peer_listener_buffer_count: Option<u32>,

pub dandelion_peer: Option<PeerAddr>,

pub peer_min_major: Option<u32>,

pub peer_min_minor: Option<u32>,
}

/// Default address for peer-to-peer connections.
Expand All @@ -262,6 +272,8 @@ impl Default for P2PConfig {
peer_min_preferred_outbound_count: None,
peer_listener_buffer_count: None,
dandelion_peer: None,
peer_min_major: None,
peer_min_minor: None,
}
}
}
Expand Down Expand Up @@ -308,6 +320,22 @@ impl P2PConfig {
None => PEER_LISTENER_BUFFER_COUNT,
}
}

/// return peer min major version
pub fn peer_min_major(&self) -> u32 {
match self.peer_min_major {
Some(n) => std::cmp::max(PEER_MIN_MAJOR, n),
None => PEER_MIN_MAJOR,
}
}

/// return peer min minor version
pub fn peer_min_minor(&self) -> u32 {
match self.peer_min_minor {
Some(n) => std::cmp::max(PEER_MIN_MINOR, n),
None => PEER_MIN_MINOR,
}
}
}

/// Type of seeding the server will use to find other peers on the network.
Expand Down