diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index 1ed5579fea..adbba4a35a 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -58,7 +58,8 @@ use crate::observed_data_sidecars::ObservedDataSidecars; use crate::observed_operations::{ObservationOutcome, ObservedOperations}; use crate::observed_slashable::ObservedSlashable; use crate::payload_envelope_verification::{ - EnvelopeError, ExecutedEnvelope, ExecutionPendingEnvelope, + AvailableEnvelope, EnvelopeError, ExecutedEnvelope, ExecutionPendingEnvelope, + MaybeAvailableEnvelope, }; use crate::pending_payload_envelopes::PendingPayloadEnvelopes; use crate::persisted_beacon_chain::PersistedBeaconChain; @@ -3577,6 +3578,21 @@ impl BeaconChain { .map_err(BeaconChainError::TokioJoin)? .ok_or(BeaconChainError::RuntimeShutdown)??; + // TODO(gloas): implement data column availability checking. + // For now, treat all envelopes as available after EL verification with empty columns. + let signed_envelope = match signed_envelope { + available @ MaybeAvailableEnvelope::Available(_) => available, + MaybeAvailableEnvelope::AvailabilityPending { block_hash, envelope } => { + MaybeAvailableEnvelope::Available(AvailableEnvelope::new( + block_hash, + envelope, + vec![], + None, + self.spec.clone(), + )) + } + }; + Ok(ExecutedEnvelope::new( signed_envelope, import_data, diff --git a/beacon_node/beacon_chain/src/payload_envelope_verification/gossip_verified_envelope.rs b/beacon_node/beacon_chain/src/payload_envelope_verification/gossip_verified_envelope.rs index c9bef630aa..504a1d2c70 100644 --- a/beacon_node/beacon_chain/src/payload_envelope_verification/gossip_verified_envelope.rs +++ b/beacon_node/beacon_chain/src/payload_envelope_verification/gossip_verified_envelope.rs @@ -2,7 +2,10 @@ use std::sync::Arc; use educe::Educe; use slot_clock::SlotClock; -use state_processing::{VerifySignatures, envelope_processing::process_execution_payload_envelope}; +use state_processing::{ + VerifySignatures, + envelope_processing::{VerifyStateRoot, process_execution_payload_envelope}, +}; use tracing::{Span, debug}; use types::{ EthSpec, SignedBeaconBlock, SignedExecutionPayloadEnvelope, @@ -236,6 +239,7 @@ impl IntoExecutionPendingEnvelope for GossipVerifiedEnve &signed_envelope, // verify signature already done for GossipVerifiedEnvelope VerifySignatures::False, + VerifyStateRoot::True, &chain.spec, )?; diff --git a/beacon_node/beacon_chain/src/payload_envelope_verification/mod.rs b/beacon_node/beacon_chain/src/payload_envelope_verification/mod.rs index 80e62f93b7..20696fa80e 100644 --- a/beacon_node/beacon_chain/src/payload_envelope_verification/mod.rs +++ b/beacon_node/beacon_chain/src/payload_envelope_verification/mod.rs @@ -84,6 +84,22 @@ pub struct AvailableEnvelope { } impl AvailableEnvelope { + pub fn new( + execution_block_hash: ExecutionBlockHash, + envelope: Arc>, + columns: DataColumnSidecarList, + columns_available_timestamp: Option, + spec: Arc, + ) -> Self { + Self { + execution_block_hash, + envelope, + columns, + columns_available_timestamp, + spec, + } + } + pub fn message(&self) -> &ExecutionPayloadEnvelope { &self.envelope.message }