mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-16 03:12:41 +00:00
* add retry logic to peer discovery and an expiration time for peers * Restructure discovery * Add mac build to CI * Always return an error for Health when not linux * Change macos workflow * Rename macos tests * Update DiscoverPeers messages to pass Instants. Implement PartialEq for AttServiceMessage * update discover peer queueing to always check existing messages and extend min_ttl as necessary * update method name and comment * Correct merge issues * Add subnet id check to partialeq, fix discover peer message dups * fix discover peer message dups * fix discover peer message dups for real this time Co-authored-by: Age Manning <Age@AgeManning.com> Co-authored-by: Paul Hauner <paul@paulhauner.com>
34 lines
1.1 KiB
Rust
34 lines
1.1 KiB
Rust
///! The subnet predicate used for searching for a particular subnet.
|
|
use super::*;
|
|
|
|
/// Returns the predicate for a given subnet.
|
|
pub fn subnet_predicate<TSpec>(
|
|
subnet_id: SubnetId,
|
|
log: &slog::Logger,
|
|
) -> impl Fn(&Enr) -> bool + Send + 'static + Clone
|
|
where
|
|
TSpec: EthSpec,
|
|
{
|
|
let log_clone = log.clone();
|
|
|
|
move |enr: &Enr| {
|
|
if let Some(bitfield_bytes) = enr.get(BITFIELD_ENR_KEY) {
|
|
let bitfield = match BitVector::<TSpec::SubnetBitfieldLength>::from_ssz_bytes(
|
|
bitfield_bytes,
|
|
) {
|
|
Ok(v) => v,
|
|
Err(e) => {
|
|
warn!(log_clone, "Could not decode ENR bitfield for peer"; "peer_id" => format!("{}", enr.peer_id()), "error" => format!("{:?}", e));
|
|
return false;
|
|
}
|
|
};
|
|
|
|
return bitfield.get(*subnet_id as usize).unwrap_or_else(|_| {
|
|
debug!(log_clone, "Peer found but not on desired subnet"; "peer_id" => format!("{}", enr.peer_id()));
|
|
false
|
|
});
|
|
}
|
|
false
|
|
}
|
|
}
|