From c52cee9d9517f2265a34a74060aefd8001f020d1 Mon Sep 17 00:00:00 2001 From: Eitan Seri-Levi Date: Thu, 7 May 2026 14:53:36 +0000 Subject: [PATCH] Allow optimistic payload verification for GLOaS envelopes Remove the OptimisticSyncNotSupported check in into_executed_payload_envelope. When the EL returns SYNCING (optimistic) for a payload envelope's newPayload call, the envelope import should proceed rather than being rejected. This commonly occurs after range sync imports blocks that the EL hasn't yet validated - subsequent envelopes arriving via gossip would be rejected because the EL is still catching up. The downstream import path already handles optimistic status correctly: - fork choice marks the payload as received regardless of EL status - the payload_verification_status is propagated to SSE events/metrics - if the payload is later found invalid, the normal invalidation mechanism handles it (same as for blocks) --- .../src/payload_envelope_verification/import.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/beacon_node/beacon_chain/src/payload_envelope_verification/import.rs b/beacon_node/beacon_chain/src/payload_envelope_verification/import.rs index a8e8a59ede..88b021e8a6 100644 --- a/beacon_node/beacon_chain/src/payload_envelope_verification/import.rs +++ b/beacon_node/beacon_chain/src/payload_envelope_verification/import.rs @@ -192,13 +192,11 @@ impl BeaconChain { .map_err(BeaconChainError::TokioJoin)? .ok_or(BeaconChainError::RuntimeShutdown)??; - // TODO(gloas): optimistic sync is not supported for Gloas, maybe we could re-add it - if payload_verification_outcome - .payload_verification_status - .is_optimistic() - { - return Err(BlockError::OptimisticSyncNotSupported { block_root }); - } + // NOTE: We allow optimistic (SYNCING) payload verification status here. + // This can happen when the EL is still catching up (e.g., after range sync imports + // blocks that the EL hasn't validated yet). The envelope import will proceed and + // fork choice will mark the payload as received. If the payload is later found to + // be invalid, the normal invalidation mechanism will handle it. Ok(AvailabilityPendingExecutedEnvelope::new( signed_envelope,