Skip to content

Commit 6d5b5ed

Browse files
committed
Merge remote-tracking branch 'origin/unstable' into jimmy/lh-2271-activate-peerdas-at-fulu-fork-and-remove-eip7594_fork_epoch
2 parents 8980832 + 06329ec commit 6d5b5ed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1132
-417
lines changed

Cargo.lock

Lines changed: 16 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ members = [
3333
"common/eth2_network_config",
3434
"common/eth2_wallet_manager",
3535
"common/filesystem",
36+
"common/health_metrics",
3637
"common/lighthouse_version",
3738
"common/lockfile",
3839
"common/logging",
@@ -252,6 +253,7 @@ filesystem = { path = "common/filesystem" }
252253
fork_choice = { path = "consensus/fork_choice" }
253254
genesis = { path = "beacon_node/genesis" }
254255
gossipsub = { path = "beacon_node/lighthouse_network/gossipsub/" }
256+
health_metrics = { path = "common/health_metrics" }
255257
http_api = { path = "beacon_node/http_api" }
256258
initialized_validators = { path = "validator_client/initialized_validators" }
257259
int_to_bytes = { path = "consensus/int_to_bytes" }

account_manager/src/validator/create.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ use account_utils::{
66
};
77
use clap::{Arg, ArgAction, ArgMatches, Command};
88
use clap_utils::FLAG_HEADER;
9-
use directory::{
10-
ensure_dir_exists, parse_path_or_default_with_flag, DEFAULT_SECRET_DIR, DEFAULT_WALLET_DIR,
11-
};
9+
use directory::{parse_path_or_default_with_flag, DEFAULT_SECRET_DIR, DEFAULT_WALLET_DIR};
1210
use environment::Environment;
1311
use eth2_wallet_manager::WalletManager;
1412
use slashing_protection::{SlashingDatabase, SLASHING_PROTECTION_FILENAME};
1513
use std::ffi::OsStr;
1614
use std::fs;
15+
use std::fs::create_dir_all;
1716
use std::path::{Path, PathBuf};
1817
use types::EthSpec;
1918
use validator_dir::Builder as ValidatorDirBuilder;
@@ -156,8 +155,10 @@ pub fn cli_run<E: EthSpec>(
156155
));
157156
}
158157

159-
ensure_dir_exists(&validator_dir)?;
160-
ensure_dir_exists(&secrets_dir)?;
158+
create_dir_all(&validator_dir)
159+
.map_err(|e| format!("Could not create validator dir at {validator_dir:?}: {e:?}"))?;
160+
create_dir_all(&secrets_dir)
161+
.map_err(|e| format!("Could not create secrets dir at {secrets_dir:?}: {e:?}"))?;
161162

162163
eprintln!("secrets-dir path {:?}", secrets_dir);
163164
eprintln!("wallets-dir path {:?}", wallet_base_dir);

account_manager/src/validator/recover.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ use account_utils::eth2_keystore::{keypair_from_secret, Keystore, KeystoreBuilde
55
use account_utils::{random_password, read_mnemonic_from_cli, STDIN_INPUTS_FLAG};
66
use clap::{Arg, ArgAction, ArgMatches, Command};
77
use clap_utils::FLAG_HEADER;
8-
use directory::ensure_dir_exists;
98
use directory::{parse_path_or_default_with_flag, DEFAULT_SECRET_DIR};
109
use eth2_wallet::bip39::Seed;
1110
use eth2_wallet::{recover_validator_secret_from_mnemonic, KeyType, ValidatorKeystores};
11+
use std::fs::create_dir_all;
1212
use std::path::PathBuf;
1313
use validator_dir::Builder as ValidatorDirBuilder;
1414
pub const CMD: &str = "recover";
@@ -91,8 +91,10 @@ pub fn cli_run(matches: &ArgMatches, validator_dir: PathBuf) -> Result<(), Strin
9191

9292
eprintln!("secrets-dir path: {:?}", secrets_dir);
9393

94-
ensure_dir_exists(&validator_dir)?;
95-
ensure_dir_exists(&secrets_dir)?;
94+
create_dir_all(&validator_dir)
95+
.map_err(|e| format!("Could not create validator dir at {validator_dir:?}: {e:?}"))?;
96+
create_dir_all(&secrets_dir)
97+
.map_err(|e| format!("Could not create secrets dir at {secrets_dir:?}: {e:?}"))?;
9698

9799
eprintln!();
98100
eprintln!("WARNING: KEY RECOVERY CAN LEAD TO DUPLICATING VALIDATORS KEYS, WHICH CAN LEAD TO SLASHING.");

account_manager/src/wallet/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ pub mod recover;
55
use crate::WALLETS_DIR_FLAG;
66
use clap::{Arg, ArgAction, ArgMatches, Command};
77
use clap_utils::FLAG_HEADER;
8-
use directory::{ensure_dir_exists, parse_path_or_default_with_flag, DEFAULT_WALLET_DIR};
8+
use directory::{parse_path_or_default_with_flag, DEFAULT_WALLET_DIR};
9+
use std::fs::create_dir_all;
910
use std::path::PathBuf;
1011

1112
pub const CMD: &str = "wallet";
@@ -44,7 +45,7 @@ pub fn cli_run(matches: &ArgMatches) -> Result<(), String> {
4445
} else {
4546
parse_path_or_default_with_flag(matches, WALLETS_DIR_FLAG, DEFAULT_WALLET_DIR)?
4647
};
47-
ensure_dir_exists(&wallet_base_dir)?;
48+
create_dir_all(&wallet_base_dir).map_err(|_| "Could not create wallet base dir")?;
4849

4950
eprintln!("wallet-dir path: {:?}", wallet_base_dir);
5051

beacon_node/beacon_chain/src/attestation_verification.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ use tree_hash::TreeHash;
6262
use types::{
6363
Attestation, AttestationRef, BeaconCommittee, BeaconStateError::NoCommitteeFound, ChainSpec,
6464
CommitteeIndex, Epoch, EthSpec, Hash256, IndexedAttestation, SelectionProof,
65-
SignedAggregateAndProof, Slot, SubnetId,
65+
SignedAggregateAndProof, SingleAttestation, Slot, SubnetId,
6666
};
6767

6868
pub use batch::{batch_verify_aggregated_attestations, batch_verify_unaggregated_attestations};
@@ -317,12 +317,22 @@ pub struct VerifiedUnaggregatedAttestation<'a, T: BeaconChainTypes> {
317317
attestation: AttestationRef<'a, T::EthSpec>,
318318
indexed_attestation: IndexedAttestation<T::EthSpec>,
319319
subnet_id: SubnetId,
320+
validator_index: usize,
320321
}
321322

322323
impl<T: BeaconChainTypes> VerifiedUnaggregatedAttestation<'_, T> {
323324
pub fn into_indexed_attestation(self) -> IndexedAttestation<T::EthSpec> {
324325
self.indexed_attestation
325326
}
327+
328+
pub fn single_attestation(&self) -> Option<SingleAttestation> {
329+
Some(SingleAttestation {
330+
committee_index: self.attestation.committee_index()? as usize,
331+
attester_index: self.validator_index,
332+
data: self.attestation.data().clone(),
333+
signature: self.attestation.signature().clone(),
334+
})
335+
}
326336
}
327337

328338
/// Custom `Clone` implementation is to avoid the restrictive trait bounds applied by the usual derive
@@ -1035,6 +1045,7 @@ impl<'a, T: BeaconChainTypes> VerifiedUnaggregatedAttestation<'a, T> {
10351045
attestation,
10361046
indexed_attestation,
10371047
subnet_id,
1048+
validator_index: validator_index as usize,
10381049
})
10391050
}
10401051

beacon_node/beacon_chain/src/beacon_chain.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2035,10 +2035,30 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
20352035
|v| {
20362036
// This method is called for API and gossip attestations, so this covers all unaggregated attestation events
20372037
if let Some(event_handler) = self.event_handler.as_ref() {
2038+
if event_handler.has_single_attestation_subscribers() {
2039+
let current_fork = self
2040+
.spec
2041+
.fork_name_at_slot::<T::EthSpec>(v.attestation().data().slot);
2042+
if current_fork.electra_enabled() {
2043+
// I don't see a situation where this could return None. The upstream unaggregated attestation checks
2044+
// should have already verified that this is an attestation with a single committee bit set.
2045+
if let Some(single_attestation) = v.single_attestation() {
2046+
event_handler.register(EventKind::SingleAttestation(Box::new(
2047+
single_attestation,
2048+
)));
2049+
}
2050+
}
2051+
}
2052+
20382053
if event_handler.has_attestation_subscribers() {
2039-
event_handler.register(EventKind::Attestation(Box::new(
2040-
v.attestation().clone_as_attestation(),
2041-
)));
2054+
let current_fork = self
2055+
.spec
2056+
.fork_name_at_slot::<T::EthSpec>(v.attestation().data().slot);
2057+
if !current_fork.electra_enabled() {
2058+
event_handler.register(EventKind::Attestation(Box::new(
2059+
v.attestation().clone_as_attestation(),
2060+
)));
2061+
}
20422062
}
20432063
}
20442064
metrics::inc_counter(&metrics::UNAGGREGATED_ATTESTATION_PROCESSING_SUCCESSES);

beacon_node/beacon_chain/src/events.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const DEFAULT_CHANNEL_CAPACITY: usize = 16;
88

99
pub struct ServerSentEventHandler<E: EthSpec> {
1010
attestation_tx: Sender<EventKind<E>>,
11+
single_attestation_tx: Sender<EventKind<E>>,
1112
block_tx: Sender<EventKind<E>>,
1213
blob_sidecar_tx: Sender<EventKind<E>>,
1314
finalized_tx: Sender<EventKind<E>>,
@@ -37,6 +38,7 @@ impl<E: EthSpec> ServerSentEventHandler<E> {
3738

3839
pub fn new_with_capacity(log: Logger, capacity: usize) -> Self {
3940
let (attestation_tx, _) = broadcast::channel(capacity);
41+
let (single_attestation_tx, _) = broadcast::channel(capacity);
4042
let (block_tx, _) = broadcast::channel(capacity);
4143
let (blob_sidecar_tx, _) = broadcast::channel(capacity);
4244
let (finalized_tx, _) = broadcast::channel(capacity);
@@ -56,6 +58,7 @@ impl<E: EthSpec> ServerSentEventHandler<E> {
5658

5759
Self {
5860
attestation_tx,
61+
single_attestation_tx,
5962
block_tx,
6063
blob_sidecar_tx,
6164
finalized_tx,
@@ -90,6 +93,10 @@ impl<E: EthSpec> ServerSentEventHandler<E> {
9093
.attestation_tx
9194
.send(kind)
9295
.map(|count| log_count("attestation", count)),
96+
EventKind::SingleAttestation(_) => self
97+
.single_attestation_tx
98+
.send(kind)
99+
.map(|count| log_count("single_attestation", count)),
93100
EventKind::Block(_) => self
94101
.block_tx
95102
.send(kind)
@@ -164,6 +171,10 @@ impl<E: EthSpec> ServerSentEventHandler<E> {
164171
self.attestation_tx.subscribe()
165172
}
166173

174+
pub fn subscribe_single_attestation(&self) -> Receiver<EventKind<E>> {
175+
self.single_attestation_tx.subscribe()
176+
}
177+
167178
pub fn subscribe_block(&self) -> Receiver<EventKind<E>> {
168179
self.block_tx.subscribe()
169180
}
@@ -232,6 +243,10 @@ impl<E: EthSpec> ServerSentEventHandler<E> {
232243
self.attestation_tx.receiver_count() > 0
233244
}
234245

246+
pub fn has_single_attestation_subscribers(&self) -> bool {
247+
self.single_attestation_tx.receiver_count() > 0
248+
}
249+
235250
pub fn has_block_subscribers(&self) -> bool {
236251
self.block_tx.receiver_count() > 0
237252
}

0 commit comments

Comments
 (0)