Skip to content

Commit

Permalink
fix failing electra test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Wizdave97 committed Feb 17, 2025
1 parent cde7569 commit 4956454
Showing 1 changed file with 67 additions and 7 deletions.
74 changes: 67 additions & 7 deletions modules/consensus/sync-committee/prover/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,12 @@ use sync_committee_primitives::{
consensus_types::{BeaconBlock, BeaconBlockHeader, BeaconState, Checkpoint, Validator},
constants::{
BlsPublicKey, Config, Root, BYTES_PER_LOGS_BLOOM, EPOCHS_PER_HISTORICAL_VECTOR,
EPOCHS_PER_SLASHINGS_VECTOR, EXECUTION_PAYLOAD_INDEX, FINALIZED_ROOT_INDEX,
HISTORICAL_ROOTS_LIMIT, MAX_ATTESTATIONS, MAX_ATTESTER_SLASHINGS,
MAX_BLS_TO_EXECUTION_CHANGES, MAX_BYTES_PER_TRANSACTION, MAX_COMMITTEES_PER_SLOT,
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD, MAX_DEPOSITS, MAX_DEPOSIT_REQUESTS_PER_PAYLOAD,
MAX_EXTRA_DATA_BYTES, MAX_PROPOSER_SLASHINGS, MAX_TRANSACTIONS_PER_PAYLOAD,
MAX_VALIDATORS_PER_COMMITTEE, MAX_VOLUNTARY_EXITS, MAX_WITHDRAWALS_PER_PAYLOAD,
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD, NEXT_SYNC_COMMITTEE_INDEX,
EPOCHS_PER_SLASHINGS_VECTOR, HISTORICAL_ROOTS_LIMIT, MAX_ATTESTATIONS,
MAX_ATTESTER_SLASHINGS, MAX_BLS_TO_EXECUTION_CHANGES, MAX_BYTES_PER_TRANSACTION,
MAX_COMMITTEES_PER_SLOT, MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD, MAX_DEPOSITS,
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD, MAX_EXTRA_DATA_BYTES, MAX_PROPOSER_SLASHINGS,
MAX_TRANSACTIONS_PER_PAYLOAD, MAX_VALIDATORS_PER_COMMITTEE, MAX_VOLUNTARY_EXITS,
MAX_WITHDRAWALS_PER_PAYLOAD, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD,
PENDING_CONSOLIDATIONS_LIMIT, PENDING_DEPOSITS_LIMIT, PENDING_PARTIAL_WITHDRAWALS_LIMIT,
SLOTS_PER_HISTORICAL_ROOT, SYNC_COMMITTEE_SIZE, VALIDATOR_REGISTRY_LIMIT,
},
Expand All @@ -49,6 +48,11 @@ use tracing::instrument;

use sync_committee_verifier::crypto::pubkey_to_projective;

#[cfg(not(feature = "electra"))]
use sync_committee_primitives::constants::{
EXECUTION_PAYLOAD_INDEX, FINALIZED_ROOT_INDEX, NEXT_SYNC_COMMITTEE_INDEX,
};

pub type BeaconStateType<const ETH1_DATA_VOTES_BOUND: usize> = BeaconState<
SLOTS_PER_HISTORICAL_ROOT,
HISTORICAL_ROOTS_LIMIT,
Expand Down Expand Up @@ -441,6 +445,7 @@ impl<C: Config, const ETH1_DATA_VOTES_BOUND: usize> SyncCommitteeProver<C, ETH1_
}
}

#[cfg(not(feature = "electra"))]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_execution_payload<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
beacon_state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
Expand Down Expand Up @@ -471,6 +476,7 @@ pub fn prove_execution_payload<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
})
}

#[cfg(not(feature = "electra"))]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_sync_committee_update<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
Expand All @@ -480,6 +486,7 @@ pub fn prove_sync_committee_update<C: Config, const ETH1_DATA_VOTES_BOUND: usize
Ok(proof)
}

#[cfg(not(feature = "electra"))]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_finalized_header<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
Expand All @@ -491,6 +498,59 @@ pub fn prove_finalized_header<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
Ok(proof)
}

#[cfg(feature = "electra")]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_execution_payload<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
beacon_state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<ExecutionPayloadProof> {
trace!(target: "sync-committee-prover", "Proving execution payload");
let indices = [
C::EXECUTION_PAYLOAD_STATE_ROOT_INDEX as usize,
C::EXECUTION_PAYLOAD_BLOCK_NUMBER_INDEX as usize,
C::EXECUTION_PAYLOAD_TIMESTAMP_INDEX as usize,
];
// generate multi proofs
let multi_proof = ssz_rs::generate_proof(
&mut beacon_state.latest_execution_payload_header,
indices.as_slice(),
)?;

Ok(ExecutionPayloadProof {
state_root: H256::from_slice(
beacon_state.latest_execution_payload_header.state_root.as_slice(),
),
block_number: beacon_state.latest_execution_payload_header.block_number,
timestamp: beacon_state.latest_execution_payload_header.timestamp,
multi_proof,
execution_payload_branch: ssz_rs::generate_proof(
beacon_state,
&[C::EXECUTION_PAYLOAD_INDEX_ELECTRA as usize],
)?,
})
}

#[cfg(feature = "electra")]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_sync_committee_update<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<Vec<Node>> {
trace!(target: "sync-committee-prover", "Proving sync committee update");
let proof = ssz_rs::generate_proof(state, &[C::NEXT_SYNC_COMMITTEE_INDEX_ELECTRA as usize])?;
Ok(proof)
}

#[cfg(feature = "electra")]
#[instrument(level = "trace", target = "sync-committee-prover", skip_all)]
pub fn prove_finalized_header<C: Config, const ETH1_DATA_VOTES_BOUND: usize>(
state: &mut BeaconStateType<ETH1_DATA_VOTES_BOUND>,
) -> anyhow::Result<Vec<Node>> {
trace!(target: "sync-committee-prover", "Proving finalized head");
let indices = [C::FINALIZED_ROOT_INDEX_ELECTRA as usize];
let proof = ssz_rs::generate_proof(state, indices.as_slice())?;

Ok(proof)
}

pub fn eth_aggregate_public_keys(points: &[BlsPublicKey]) -> anyhow::Result<BlsPublicKey> {
let points = points
.iter()
Expand Down

0 comments on commit 4956454

Please sign in to comment.