Add flag to import all attestations (#1941)

## Issue Addressed

NA

## Proposed Changes

Adds the `--import-all-attestations` flag which tells the `network::AttestationService` to import/aggregate all attestations after verification (instead of only ones for subnets that are relevant to local validators).

This is useful for testing/debugging and also for creating back-up nodes that should be all cached up and ready for any validator.

## Additional Info

NA
This commit is contained in:
Paul Hauner 2020-11-22 23:58:25 +00:00
parent d0cbf3111a
commit 65b1cf2af1
4 changed files with 25 additions and 0 deletions

View File

@ -84,6 +84,10 @@ pub struct Config {
/// Subscribe to all subnets for the duration of the runtime. /// Subscribe to all subnets for the duration of the runtime.
pub subscribe_all_subnets: bool, pub subscribe_all_subnets: bool,
/// Import/aggregate all attestations recieved on subscribed subnets for the duration of the
/// runtime.
pub import_all_attestations: bool,
/// List of extra topics to initially subscribe to as strings. /// List of extra topics to initially subscribe to as strings.
pub topics: Vec<GossipKind>, pub topics: Vec<GossipKind>,
} }
@ -185,6 +189,7 @@ impl Default for Config {
disable_discovery: false, disable_discovery: false,
upnp_enabled: true, upnp_enabled: true,
subscribe_all_subnets: false, subscribe_all_subnets: false,
import_all_attestations: false,
topics: Vec::new(), topics: Vec::new(),
} }
} }

View File

@ -121,6 +121,9 @@ pub struct AttestationService<T: BeaconChainTypes> {
/// We are always subscribed to all subnets. /// We are always subscribed to all subnets.
subscribe_all_subnets: bool, subscribe_all_subnets: bool,
/// We process and aggregate all attestations on subscribed subnets.
import_all_attestations: bool,
/// The logger for the attestation service. /// The logger for the attestation service.
log: slog::Logger, log: slog::Logger,
} }
@ -161,6 +164,7 @@ impl<T: BeaconChainTypes> AttestationService<T> {
known_validators: HashSetDelay::new(last_seen_val_timeout), known_validators: HashSetDelay::new(last_seen_val_timeout),
waker: None, waker: None,
subscribe_all_subnets: config.subscribe_all_subnets, subscribe_all_subnets: config.subscribe_all_subnets,
import_all_attestations: config.import_all_attestations,
discovery_disabled: config.disable_discovery, discovery_disabled: config.disable_discovery,
log, log,
} }
@ -286,6 +290,10 @@ impl<T: BeaconChainTypes> AttestationService<T> {
subnet: SubnetId, subnet: SubnetId,
attestation: &Attestation<T::EthSpec>, attestation: &Attestation<T::EthSpec>,
) -> bool { ) -> bool {
if self.import_all_attestations {
return true;
}
let exact_subnet = ExactSubnet { let exact_subnet = ExactSubnet {
subnet_id: subnet, subnet_id: subnet,
slot: attestation.data.slot, slot: attestation.data.slot,

View File

@ -37,6 +37,14 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
This will also advertise the beacon node as being long-lived subscribed to all subnets.") This will also advertise the beacon node as being long-lived subscribed to all subnets.")
.takes_value(false), .takes_value(false),
) )
.arg(
Arg::with_name("import-all-attestations")
.long("import-all-attestations")
.help("Import and aggregate all attestations, regardless of validator subscriptions. \
This will only import attestations from already-subscribed subnets, use with \
--subscribe-all-subnets to ensure all attestations are received for import.")
.takes_value(false),
)
.arg( .arg(
Arg::with_name("zero-ports") Arg::with_name("zero-ports")
.long("zero-ports") .long("zero-ports")

View File

@ -373,6 +373,10 @@ pub fn set_network_config(
config.subscribe_all_subnets = true; config.subscribe_all_subnets = true;
} }
if cli_args.is_present("import-all-attestations") {
config.import_all_attestations = true;
}
if let Some(listen_address_str) = cli_args.value_of("listen-address") { if let Some(listen_address_str) = cli_args.value_of("listen-address") {
let listen_address = listen_address_str let listen_address = listen_address_str
.parse() .parse()