Optimized p2p communication. Disabled connections from v0.6.*. Updated dependencies.

pull/276/head
Revertron 2 years ago
parent ef5cef290e
commit 20054e4be7

10
Cargo.lock generated

@ -84,7 +84,7 @@ dependencies = [
[[package]]
name = "alfis"
version = "0.7.5"
version = "0.7.6"
dependencies = [
"base64",
"bincode",
@ -260,9 +260,9 @@ dependencies = [
[[package]]
name = "chacha20poly1305"
version = "0.9.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a"
checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
dependencies = [
"aead 0.4.3",
"chacha20",
@ -1411,9 +1411,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
name = "ureq"
version = "2.4.0"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9399fa2f927a3d327187cbd201480cee55bee6ac5d3c77dd27f0c6814cff16d5"
checksum = "b97acb4c28a254fd7a4aeec976c46a7fa404eac4d7c134b30c75144846d7cb8f"
dependencies = [
"base64",
"chunked_transfer",

@ -1,6 +1,6 @@
[package]
name = "alfis"
version = "0.7.5"
version = "0.7.6"
authors = ["Revertron <alfis@revertron.com>"]
edition = "2021"
build = "build.rs"
@ -20,7 +20,7 @@ sha2 = "0.10.2"
ed25519-dalek = "1.0"
x25519-dalek = "1.2"
ecies-ed25519 = "0.5"
chacha20poly1305 = "0.9"
chacha20poly1305 = "0.9.1"
signature = "1.5"
blakeout = "0.3.0"
num_cpus = "1.13.1"
@ -39,7 +39,7 @@ rand-old = { package = "rand", version = "0.7.0" } # For ed25519-dalek
sqlite = "0.26.0"
uuid = { version = "1.1.2", features = ["serde", "v4"] }
mio = { version = "0.8.4", features = ["os-poll", "net"] }
ureq = { version = "2.4", optional = true }
ureq = { version = "2.5", optional = true }
lru = "0.7.7"
derive_more = "0.99.17"
lazy_static = "1.4.0"

@ -459,6 +459,9 @@ impl Network {
let my_id = self.peers.get_my_id().to_owned();
let answer = match message {
Message::Hand { app_version, origin, version, public, rand_id } => {
if app_version.starts_with("0.6") {
return State::Banned;
}
if self.peers.is_our_own_connect(&rand_id) {
warn!("Detected loop connect");
State::SendLoop
@ -490,6 +493,9 @@ impl Network {
if self.peers.is_tween_connect(&rand_id) {
return State::Twin;
}
if app_version.starts_with("0.6") {
return State::Banned;
}
let nodes = self.peers.get_peers_active_count();
let peer = self.peers.get_mut_peer(token).unwrap();
// TODO check rand_id whether we have this peers connection already
@ -610,6 +616,7 @@ impl Network {
let peers_count = self.peers.get_peers_active_count();
let peer = self.peers.get_mut_peer(token).unwrap();
peer.set_received_block(block.index);
trace!("New block from {}", &peer.get_addr());
let mut context = self.context.lock().unwrap();
let max_height = context.chain.get_max_height();
@ -654,8 +661,8 @@ impl Network {
if height + 1 == block.index {
context.chain.update_max_height(height);
post(crate::event::Event::SyncFinished);
return State::Banned;
}
return State::Banned;
}
BlockQuality::Rewind => {
debug!("Got some orphan block, requesting its parent");

@ -19,6 +19,7 @@ pub struct Peer {
active: bool,
reconnects: u32,
received_block: u64,
sent_height: u64,
cipher: Option<Chacha>,
fork: HashMap<u64, Block>
}
@ -36,6 +37,7 @@ impl Peer {
active: false,
reconnects: 0,
received_block: 0,
sent_height: 0,
cipher: None,
fork: HashMap::new()
}
@ -84,6 +86,18 @@ impl Peer {
self.height = height;
}
pub fn get_height(&self) -> u64 {
self.height
}
pub fn set_sent_height(&mut self, height: u64) {
self.sent_height = height;
}
pub fn get_sent_height(&self) -> u64 {
self.sent_height
}
pub fn is_higher(&self, height: u64) -> bool {
self.height > height
}

@ -284,13 +284,14 @@ impl Peers {
let mut rng = rand::thread_rng();
match self.peers
.iter_mut()
.filter_map(|(token, peer)| if peer.is_lower(height) && peer.get_state().is_idle() { Some((token, peer)) } else { None })
.filter_map(|(token, peer)| if peer.is_lower(height) && peer.get_state().is_idle() && peer.get_sent_height() < height { Some((token, peer)) } else { None })
.choose(&mut rng) {
None => {}
Some((token, peer)) => {
debug!("Peer {} is behind, sending ping", &peer.get_addr().ip());
debug!("Peer {} is behind ({}), sending ping", &peer.get_addr().ip(), peer.get_height());
registry.reregister(peer.get_stream(), *token, Interest::WRITABLE).unwrap();
peer.set_state(State::message(Message::Ping { height, hash }));
peer.set_sent_height(height);
self.update_behind_ping_time();
}
}
@ -368,7 +369,7 @@ impl Peers {
if self.new_peers.is_empty() {
return;
}
self.new_peers.dedup();
self.new_peers.sort().dedup();
let addr = self.new_peers.remove(0);
match self.connect_peer(&addr, registry, unique_token, yggdrasil_only) {
Ok(_) => {}

Loading…
Cancel
Save