Skip to content

Commit

Permalink
Dedup match_attestation_data
Browse files Browse the repository at this point in the history
  • Loading branch information
dapplion committed Jun 17, 2024
1 parent 8473e3a commit 38bc5d5
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 27 deletions.
15 changes: 15 additions & 0 deletions common/eth2/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,21 @@ pub struct AttesterData {
pub slot: Slot,
}

impl AttesterData {
pub fn match_attestation_data<E: EthSpec>(
&self,
attestation_data: &AttestationData,
spec: &ChainSpec,
) -> bool {
if spec.fork_name_at_slot::<E>(attestation_data.slot) < ForkName::Electra {
self.slot == attestation_data.slot && self.committee_index == attestation_data.index
} else {
// After electra `attestation_data.index` is set to 0 and does not match the duties
self.slot == attestation_data.index
}
}
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ProposerData {
pub pubkey: PublicKeyBytes,
Expand Down
30 changes: 3 additions & 27 deletions validator_client/src/attestation_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,7 @@ use std::ops::Deref;
use std::sync::Arc;
use tokio::time::{sleep, sleep_until, Duration, Instant};
use tree_hash::TreeHash;
use types::ForkName;
use types::{
attestation::AttestationBase, AggregateSignature, Attestation, AttestationData,
AttestationElectra, BitList, BitVector, ChainSpec, CommitteeIndex, EthSpec, Slot,
};
use types::{Attestation, AttestationData, ChainSpec, CommitteeIndex, EthSpec, Slot};

/// Builds an `AttestationService`.
pub struct AttestationServiceBuilder<T: SlotClock + 'static, E: EthSpec> {
Expand Down Expand Up @@ -363,17 +359,8 @@ impl<T: SlotClock + 'static, E: EthSpec> AttestationService<T, E> {
let duty = &duty_and_proof.duty;
let attestation_data = attestation_data_ref;

let fork_name = self
.context
.eth2_config
.spec
.fork_name_at_slot::<E>(attestation_data.slot);

// Ensure that the attestation matches the duties.
#[allow(clippy::suspicious_operation_groupings)]
if duty.slot != attestation_data.slot
|| (fork_name < ForkName::Electra && duty.committee_index != attestation_data.index)
{
if !duty.match_attestation_data::<E>(attestation_data, &self.context.eth2_config.spec) {
crit!(
log,
"Inconsistent validator duties during signing";
Expand Down Expand Up @@ -552,23 +539,12 @@ impl<T: SlotClock + 'static, E: EthSpec> AttestationService<T, E> {
.await
.map_err(|e| e.to_string())?;

let fork_name = self
.context
.eth2_config
.spec
.fork_name_at_slot::<E>(attestation_data.slot);

// Create futures to produce the signed aggregated attestations.
let signing_futures = validator_duties.iter().map(|duty_and_proof| async move {
let duty = &duty_and_proof.duty;
let selection_proof = duty_and_proof.selection_proof.as_ref()?;

let slot = attestation_data.slot;
let committee_index = attestation_data.index;

if duty.slot != slot
|| (fork_name < ForkName::Electra && duty.committee_index != committee_index)
{
if !duty.match_attestation_data::<E>(attestation_data, &self.context.eth2_config.spec) {
crit!(log, "Inconsistent validator duties during signing");
return None;
}
Expand Down

0 comments on commit 38bc5d5

Please sign in to comment.