mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-17 20:02:43 +00:00
superstruct the AttesterSlashing (#5636)
* `superstruct` Attester Fork Variants * Push a little further * Deal with Encode / Decode of AttesterSlashing * not so sure about this.. * Stop Encode/Decode Bounds from Propagating Out * Tons of Changes.. * More Conversions to AttestationRef * Add AsReference trait (#15) * Add AsReference trait * Fix some snafus * Got it Compiling! :D * Got Tests Building * Get beacon chain tests compiling --------- Co-authored-by: Michael Sproul <micsproul@gmail.com>
This commit is contained in:
@@ -46,13 +46,16 @@ pub mod base {
|
||||
///
|
||||
/// Returns `Ok(())` if the validation and state updates completed successfully, otherwise returns
|
||||
/// an `Err` describing the invalid object or cause of failure.
|
||||
pub fn process_attestations<E: EthSpec>(
|
||||
pub fn process_attestations<'a, E: EthSpec, I>(
|
||||
state: &mut BeaconState<E>,
|
||||
attestations: &[Attestation<E>],
|
||||
attestations: I,
|
||||
verify_signatures: VerifySignatures,
|
||||
ctxt: &mut ConsensusContext<E>,
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
) -> Result<(), BlockProcessingError>
|
||||
where
|
||||
I: Iterator<Item = AttestationRef<'a, E>>,
|
||||
{
|
||||
// Ensure required caches are all built. These should be no-ops during regular operation.
|
||||
state.build_committee_cache(RelativeEpoch::Current, spec)?;
|
||||
state.build_committee_cache(RelativeEpoch::Previous, spec)?;
|
||||
@@ -63,7 +66,7 @@ pub mod base {
|
||||
let proposer_index = ctxt.get_proposer_index(state, spec)?;
|
||||
|
||||
// Verify and apply each attestation.
|
||||
for (i, attestation) in attestations.iter().enumerate() {
|
||||
for (i, attestation) in attestations.enumerate() {
|
||||
verify_attestation_for_block_inclusion(
|
||||
state,
|
||||
attestation,
|
||||
@@ -74,7 +77,7 @@ pub mod base {
|
||||
.map_err(|e| e.into_with_index(i))?;
|
||||
|
||||
match attestation {
|
||||
Attestation::Base(att) => {
|
||||
AttestationRef::Base(att) => {
|
||||
let pending_attestation = PendingAttestation {
|
||||
aggregation_bits: att.aggregation_bits.clone(),
|
||||
data: att.data.clone(),
|
||||
@@ -94,7 +97,7 @@ pub mod base {
|
||||
.push(pending_attestation)?;
|
||||
}
|
||||
}
|
||||
Attestation::Electra(_) => {
|
||||
AttestationRef::Electra(_) => {
|
||||
// TODO(electra) pending attestations are only phase 0
|
||||
// so we should just raise a relevant error here
|
||||
todo!()
|
||||
@@ -110,24 +113,24 @@ pub mod altair_deneb {
|
||||
use super::*;
|
||||
use crate::common::update_progressive_balances_cache::update_progressive_balances_on_attestation;
|
||||
|
||||
pub fn process_attestations<E: EthSpec>(
|
||||
pub fn process_attestations<'a, E: EthSpec, I>(
|
||||
state: &mut BeaconState<E>,
|
||||
attestations: &[Attestation<E>],
|
||||
attestations: I,
|
||||
verify_signatures: VerifySignatures,
|
||||
ctxt: &mut ConsensusContext<E>,
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
attestations
|
||||
.iter()
|
||||
.enumerate()
|
||||
.try_for_each(|(i, attestation)| {
|
||||
process_attestation(state, attestation, i, ctxt, verify_signatures, spec)
|
||||
})
|
||||
) -> Result<(), BlockProcessingError>
|
||||
where
|
||||
I: Iterator<Item = AttestationRef<'a, E>>,
|
||||
{
|
||||
attestations.enumerate().try_for_each(|(i, attestation)| {
|
||||
process_attestation(state, attestation, i, ctxt, verify_signatures, spec)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn process_attestation<E: EthSpec>(
|
||||
state: &mut BeaconState<E>,
|
||||
attestation: &Attestation<E>,
|
||||
attestation: AttestationRef<E>,
|
||||
att_index: usize,
|
||||
ctxt: &mut ConsensusContext<E>,
|
||||
verify_signatures: VerifySignatures,
|
||||
@@ -238,16 +241,19 @@ pub fn process_proposer_slashings<E: EthSpec>(
|
||||
///
|
||||
/// Returns `Ok(())` if the validation and state updates completed successfully, otherwise returns
|
||||
/// an `Err` describing the invalid object or cause of failure.
|
||||
pub fn process_attester_slashings<E: EthSpec>(
|
||||
pub fn process_attester_slashings<'a, E: EthSpec, I>(
|
||||
state: &mut BeaconState<E>,
|
||||
attester_slashings: &[AttesterSlashing<E>],
|
||||
attester_slashings: I,
|
||||
verify_signatures: VerifySignatures,
|
||||
ctxt: &mut ConsensusContext<E>,
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
) -> Result<(), BlockProcessingError>
|
||||
where
|
||||
I: Iterator<Item = AttesterSlashingRef<'a, E>>,
|
||||
{
|
||||
state.build_slashings_cache()?;
|
||||
|
||||
for (i, attester_slashing) in attester_slashings.iter().enumerate() {
|
||||
for (i, attester_slashing) in attester_slashings.enumerate() {
|
||||
let slashable_indices =
|
||||
verify_attester_slashing(state, attester_slashing, verify_signatures, spec)
|
||||
.map_err(|e| e.into_with_index(i))?;
|
||||
|
||||
Reference in New Issue
Block a user