Optimized p2p communication. Disabled connections from v0.6.*. Updated dependencies.
This commit is contained in:
Generated
+5
-5
@@ -84,7 +84,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "alfis"
|
name = "alfis"
|
||||||
version = "0.7.5"
|
version = "0.7.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"bincode",
|
"bincode",
|
||||||
@@ -260,9 +260,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chacha20poly1305"
|
name = "chacha20poly1305"
|
||||||
version = "0.9.0"
|
version = "0.9.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a"
|
checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aead 0.4.3",
|
"aead 0.4.3",
|
||||||
"chacha20",
|
"chacha20",
|
||||||
@@ -1411,9 +1411,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ureq"
|
name = "ureq"
|
||||||
version = "2.4.0"
|
version = "2.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9399fa2f927a3d327187cbd201480cee55bee6ac5d3c77dd27f0c6814cff16d5"
|
checksum = "b97acb4c28a254fd7a4aeec976c46a7fa404eac4d7c134b30c75144846d7cb8f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"chunked_transfer",
|
"chunked_transfer",
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "alfis"
|
name = "alfis"
|
||||||
version = "0.7.5"
|
version = "0.7.6"
|
||||||
authors = ["Revertron <alfis@revertron.com>"]
|
authors = ["Revertron <alfis@revertron.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
@@ -20,7 +20,7 @@ sha2 = "0.10.2"
|
|||||||
ed25519-dalek = "1.0"
|
ed25519-dalek = "1.0"
|
||||||
x25519-dalek = "1.2"
|
x25519-dalek = "1.2"
|
||||||
ecies-ed25519 = "0.5"
|
ecies-ed25519 = "0.5"
|
||||||
chacha20poly1305 = "0.9"
|
chacha20poly1305 = "0.9.1"
|
||||||
signature = "1.5"
|
signature = "1.5"
|
||||||
blakeout = "0.3.0"
|
blakeout = "0.3.0"
|
||||||
num_cpus = "1.13.1"
|
num_cpus = "1.13.1"
|
||||||
@@ -39,7 +39,7 @@ rand-old = { package = "rand", version = "0.7.0" } # For ed25519-dalek
|
|||||||
sqlite = "0.26.0"
|
sqlite = "0.26.0"
|
||||||
uuid = { version = "1.1.2", features = ["serde", "v4"] }
|
uuid = { version = "1.1.2", features = ["serde", "v4"] }
|
||||||
mio = { version = "0.8.4", features = ["os-poll", "net"] }
|
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"
|
lru = "0.7.7"
|
||||||
derive_more = "0.99.17"
|
derive_more = "0.99.17"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
|
|||||||
+8
-1
@@ -459,6 +459,9 @@ impl Network {
|
|||||||
let my_id = self.peers.get_my_id().to_owned();
|
let my_id = self.peers.get_my_id().to_owned();
|
||||||
let answer = match message {
|
let answer = match message {
|
||||||
Message::Hand { app_version, origin, version, public, rand_id } => {
|
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) {
|
if self.peers.is_our_own_connect(&rand_id) {
|
||||||
warn!("Detected loop connect");
|
warn!("Detected loop connect");
|
||||||
State::SendLoop
|
State::SendLoop
|
||||||
@@ -490,6 +493,9 @@ impl Network {
|
|||||||
if self.peers.is_tween_connect(&rand_id) {
|
if self.peers.is_tween_connect(&rand_id) {
|
||||||
return State::Twin;
|
return State::Twin;
|
||||||
}
|
}
|
||||||
|
if app_version.starts_with("0.6") {
|
||||||
|
return State::Banned;
|
||||||
|
}
|
||||||
let nodes = self.peers.get_peers_active_count();
|
let nodes = self.peers.get_peers_active_count();
|
||||||
let peer = self.peers.get_mut_peer(token).unwrap();
|
let peer = self.peers.get_mut_peer(token).unwrap();
|
||||||
// TODO check rand_id whether we have this peers connection already
|
// 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 peers_count = self.peers.get_peers_active_count();
|
||||||
let peer = self.peers.get_mut_peer(token).unwrap();
|
let peer = self.peers.get_mut_peer(token).unwrap();
|
||||||
peer.set_received_block(block.index);
|
peer.set_received_block(block.index);
|
||||||
|
trace!("New block from {}", &peer.get_addr());
|
||||||
|
|
||||||
let mut context = self.context.lock().unwrap();
|
let mut context = self.context.lock().unwrap();
|
||||||
let max_height = context.chain.get_max_height();
|
let max_height = context.chain.get_max_height();
|
||||||
@@ -654,8 +661,8 @@ impl Network {
|
|||||||
if height + 1 == block.index {
|
if height + 1 == block.index {
|
||||||
context.chain.update_max_height(height);
|
context.chain.update_max_height(height);
|
||||||
post(crate::event::Event::SyncFinished);
|
post(crate::event::Event::SyncFinished);
|
||||||
return State::Banned;
|
|
||||||
}
|
}
|
||||||
|
return State::Banned;
|
||||||
}
|
}
|
||||||
BlockQuality::Rewind => {
|
BlockQuality::Rewind => {
|
||||||
debug!("Got some orphan block, requesting its parent");
|
debug!("Got some orphan block, requesting its parent");
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ pub struct Peer {
|
|||||||
active: bool,
|
active: bool,
|
||||||
reconnects: u32,
|
reconnects: u32,
|
||||||
received_block: u64,
|
received_block: u64,
|
||||||
|
sent_height: u64,
|
||||||
cipher: Option<Chacha>,
|
cipher: Option<Chacha>,
|
||||||
fork: HashMap<u64, Block>
|
fork: HashMap<u64, Block>
|
||||||
}
|
}
|
||||||
@@ -36,6 +37,7 @@ impl Peer {
|
|||||||
active: false,
|
active: false,
|
||||||
reconnects: 0,
|
reconnects: 0,
|
||||||
received_block: 0,
|
received_block: 0,
|
||||||
|
sent_height: 0,
|
||||||
cipher: None,
|
cipher: None,
|
||||||
fork: HashMap::new()
|
fork: HashMap::new()
|
||||||
}
|
}
|
||||||
@@ -84,6 +86,18 @@ impl Peer {
|
|||||||
self.height = height;
|
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 {
|
pub fn is_higher(&self, height: u64) -> bool {
|
||||||
self.height > height
|
self.height > height
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -284,13 +284,14 @@ impl Peers {
|
|||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
match self.peers
|
match self.peers
|
||||||
.iter_mut()
|
.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) {
|
.choose(&mut rng) {
|
||||||
None => {}
|
None => {}
|
||||||
Some((token, peer)) => {
|
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();
|
registry.reregister(peer.get_stream(), *token, Interest::WRITABLE).unwrap();
|
||||||
peer.set_state(State::message(Message::Ping { height, hash }));
|
peer.set_state(State::message(Message::Ping { height, hash }));
|
||||||
|
peer.set_sent_height(height);
|
||||||
self.update_behind_ping_time();
|
self.update_behind_ping_time();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,7 +369,7 @@ impl Peers {
|
|||||||
if self.new_peers.is_empty() {
|
if self.new_peers.is_empty() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.new_peers.dedup();
|
self.new_peers.sort().dedup();
|
||||||
let addr = self.new_peers.remove(0);
|
let addr = self.new_peers.remove(0);
|
||||||
match self.connect_peer(&addr, registry, unique_token, yggdrasil_only) {
|
match self.connect_peer(&addr, registry, unique_token, yggdrasil_only) {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
|
|||||||
Reference in New Issue
Block a user