Allow discovery to be more lenient in enr eth2 fields (#1201)

* Allow discovery to be more lenient in enr eth2 fields

* Correct web3 dep

* Discovery bug fixes
This commit is contained in:
Age Manning
2020-05-27 06:34:15 +10:00
committed by GitHub
parent 8bc82c573d
commit 5122b2c13a
8 changed files with 171 additions and 151 deletions

View File

@@ -36,6 +36,8 @@ use types::{EnrForkId, EthSpec, SubnetId};
const MAX_TIME_BETWEEN_PEER_SEARCHES: u64 = 120;
/// Initial delay between peer searches.
const INITIAL_SEARCH_DELAY: u64 = 5;
/// The number of peers we must be connected to before increasing the discovery delay.
const MINIMUM_PEERS_BEFORE_DELAY_INCREASE: usize = 5;
/// Local ENR storage filename.
pub const ENR_FILENAME: &str = "enr.dat";
/// Number of peers we'd like to have connected to a given long-lived subnet.
@@ -361,7 +363,9 @@ impl<TSpec: EthSpec> Discovery<TSpec> {
}
};
// predicate for finding nodes with a matching fork
let eth2_fork_predicate = move |enr: &Enr| enr.eth2() == Ok(enr_fork_id.clone());
let eth2_fork_predicate = move |enr: &Enr| {
enr.eth2().map(|enr| enr.fork_digest) == Ok(enr_fork_id.fork_digest.clone())
};
let predicate = move |enr: &Enr| eth2_fork_predicate(enr) && enr_predicate(enr);
// general predicate
@@ -476,10 +480,13 @@ impl<TSpec: EthSpec> NetworkBehaviour for Discovery<TSpec> {
Discv5Event::FindNodeResult { closer_peers, .. } => {
debug!(self.log, "Discovery query completed"; "peers_found" => closer_peers.len());
// update the time to the next query
if self.past_discovery_delay < MAX_TIME_BETWEEN_PEER_SEARCHES {
if self.past_discovery_delay < MAX_TIME_BETWEEN_PEER_SEARCHES
&& self.network_globals.connected_or_dialing_peers()
> MINIMUM_PEERS_BEFORE_DELAY_INCREASE
{
self.past_discovery_delay *= 2;
}
let delay = std::cmp::max(
let delay = std::cmp::min(
self.past_discovery_delay,
MAX_TIME_BETWEEN_PEER_SEARCHES,
);