Gloas PayloadAttestation gossip verification (#9145)

Co-Authored-By: hopinheimer <knmanas6@gmail.com>

Co-Authored-By: hopinheimer <48147533+hopinheimer@users.noreply.github.com>

Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
This commit is contained in:
hopinheimer
2026-04-27 05:51:20 -04:00
committed by GitHub
parent fae7941b2d
commit 6ab48a76f0
11 changed files with 1014 additions and 16 deletions

View File

@@ -53,7 +53,8 @@ use crate::observed_aggregates::{
Error as AttestationObservationError, ObservedAggregateAttestations, ObservedSyncContributions,
};
use crate::observed_attesters::{
ObservedAggregators, ObservedAttesters, ObservedSyncAggregators, ObservedSyncContributors,
ObservedAggregators, ObservedAttesters, ObservedPayloadAttesters, ObservedSyncAggregators,
ObservedSyncContributors,
};
use crate::observed_block_producers::ObservedBlockProducers;
use crate::observed_data_sidecars::ObservedDataSidecars;
@@ -418,6 +419,9 @@ pub struct BeaconChain<T: BeaconChainTypes> {
/// Maintains a record of which validators have been seen to create `SignedContributionAndProofs`
/// in recent epochs.
pub(crate) observed_sync_aggregators: RwLock<ObservedSyncAggregators<T::EthSpec>>,
/// Maintains a record of which validators have sent payload attestation messages
/// in recent slots.
pub(crate) observed_payload_attesters: RwLock<ObservedPayloadAttesters<T::EthSpec>>,
/// Maintains a record of which validators have proposed blocks for each slot.
pub observed_block_producers: RwLock<ObservedBlockProducers<T::EthSpec>>,
/// Maintains a record of blob sidecars seen over the gossip network.
@@ -2308,6 +2312,22 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
})
}
pub fn apply_payload_attestation_to_fork_choice(
&self,
indexed_payload_attestation: &IndexedPayloadAttestation<T::EthSpec>,
ptc: &PTC<T::EthSpec>,
) -> Result<(), Error> {
self.canonical_head
.fork_choice_write_lock()
.on_payload_attestation(
self.slot()?,
indexed_payload_attestation,
AttestationFromBlock::False,
&ptc.0,
)
.map_err(Into::into)
}
/// Accepts some `SyncCommitteeMessage` from the network and attempts to verify it, returning `Ok(_)` if
/// it is valid to be (re)broadcast on the gossip network.
pub fn verify_sync_committee_message_for_gossip(