mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-11 18:04:18 +00:00
Add DataColumnSidecar gossip topic and message handling (#6147)
* Add `DataColumnSidecar` gossip topic and verification (#5050 and #5783). * Remove gossip verification changes (#5783). * Merge branch 'unstable' into data-column-gossip # Conflicts: # beacon_node/beacon_chain/src/data_column_verification.rs # beacon_node/beacon_chain/src/lib.rs * Add gossip cache timeout for data columns. Rename data column metrics for consistency. * Remove usage of `unimplemented!` and address review comments. * Remove unnused `GossipDataColumnError` variants and address review comments. * Merge branch 'unstable' into data-column-gossip * Update Cargo.lock * Arc `ChainSpec` in discovery to avoid performance regression when needing to clone it repeatedly.
This commit is contained in:
@@ -22,6 +22,8 @@ pub struct GossipCache {
|
||||
beacon_block: Option<Duration>,
|
||||
/// Timeout for blobs.
|
||||
blob_sidecar: Option<Duration>,
|
||||
/// Timeout for data columns.
|
||||
data_column_sidecar: Option<Duration>,
|
||||
/// Timeout for aggregate attestations.
|
||||
aggregates: Option<Duration>,
|
||||
/// Timeout for attestations.
|
||||
@@ -51,6 +53,8 @@ pub struct GossipCacheBuilder {
|
||||
beacon_block: Option<Duration>,
|
||||
/// Timeout for blob sidecars.
|
||||
blob_sidecar: Option<Duration>,
|
||||
/// Timeout for data column sidecars.
|
||||
data_column_sidecar: Option<Duration>,
|
||||
/// Timeout for aggregate attestations.
|
||||
aggregates: Option<Duration>,
|
||||
/// Timeout for attestations.
|
||||
@@ -152,6 +156,7 @@ impl GossipCacheBuilder {
|
||||
default_timeout,
|
||||
beacon_block,
|
||||
blob_sidecar,
|
||||
data_column_sidecar,
|
||||
aggregates,
|
||||
attestation,
|
||||
voluntary_exit,
|
||||
@@ -168,6 +173,7 @@ impl GossipCacheBuilder {
|
||||
topic_msgs: HashMap::default(),
|
||||
beacon_block: beacon_block.or(default_timeout),
|
||||
blob_sidecar: blob_sidecar.or(default_timeout),
|
||||
data_column_sidecar: data_column_sidecar.or(default_timeout),
|
||||
aggregates: aggregates.or(default_timeout),
|
||||
attestation: attestation.or(default_timeout),
|
||||
voluntary_exit: voluntary_exit.or(default_timeout),
|
||||
@@ -194,6 +200,7 @@ impl GossipCache {
|
||||
let expire_timeout = match topic.kind() {
|
||||
GossipKind::BeaconBlock => self.beacon_block,
|
||||
GossipKind::BlobSidecar(_) => self.blob_sidecar,
|
||||
GossipKind::DataColumnSidecar(_) => self.data_column_sidecar,
|
||||
GossipKind::BeaconAggregateAndProof => self.aggregates,
|
||||
GossipKind::Attestation(_) => self.attestation,
|
||||
GossipKind::VoluntaryExit => self.voluntary_exit,
|
||||
|
||||
@@ -39,10 +39,10 @@ use std::{
|
||||
sync::Arc,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
use types::ForkName;
|
||||
use types::{
|
||||
consts::altair::SYNC_COMMITTEE_SUBNET_COUNT, EnrForkId, EthSpec, ForkContext, Slot, SubnetId,
|
||||
};
|
||||
use types::{ChainSpec, ForkName};
|
||||
use utils::{build_transport, strip_peer_id, Context as ServiceContext, MAX_CONNECTIONS_PER_PEER};
|
||||
|
||||
pub mod api_types;
|
||||
@@ -327,6 +327,7 @@ impl<E: EthSpec> Network<E> {
|
||||
&config,
|
||||
network_globals.clone(),
|
||||
&log,
|
||||
ctx.chain_spec,
|
||||
)
|
||||
.await?;
|
||||
// start searching for peers
|
||||
@@ -1018,6 +1019,7 @@ impl<E: EthSpec> Network<E> {
|
||||
return;
|
||||
}
|
||||
|
||||
let spec = Arc::new(self.fork_context.spec.clone());
|
||||
let filtered: Vec<SubnetDiscovery> = subnets_to_discover
|
||||
.into_iter()
|
||||
.filter(|s| {
|
||||
@@ -1053,7 +1055,7 @@ impl<E: EthSpec> Network<E> {
|
||||
// If we connect to the cached peers before the discovery query starts, then we potentially
|
||||
// save a costly discovery query.
|
||||
} else {
|
||||
self.dial_cached_enrs_in_subnet(s.subnet);
|
||||
self.dial_cached_enrs_in_subnet(s.subnet, spec.clone());
|
||||
true
|
||||
}
|
||||
})
|
||||
@@ -1217,8 +1219,8 @@ impl<E: EthSpec> Network<E> {
|
||||
|
||||
/// Dial cached Enrs in discovery service that are in the given `subnet_id` and aren't
|
||||
/// in Connected, Dialing or Banned state.
|
||||
fn dial_cached_enrs_in_subnet(&mut self, subnet: Subnet) {
|
||||
let predicate = subnet_predicate::<E>(vec![subnet], &self.log);
|
||||
fn dial_cached_enrs_in_subnet(&mut self, subnet: Subnet, spec: Arc<ChainSpec>) {
|
||||
let predicate = subnet_predicate::<E>(vec![subnet], &self.log, spec);
|
||||
let peers_to_dial: Vec<Enr> = self
|
||||
.discovery()
|
||||
.cached_enrs()
|
||||
|
||||
Reference in New Issue
Block a user