From 49c67f2632ded41596d1a006751bb2e9017a02c8 Mon Sep 17 00:00:00 2001 From: Devnet Bot Date: Sun, 17 May 2026 19:39:23 +0000 Subject: [PATCH] fix(focil): simplify IL gossip slot validation to match spec Remove non-spec attestation deadline check that was incorrectly rejecting ILs arriving in the first 1/3 of the slot. Per the heze p2p-interface spec, ILs are valid when message.slot == current_slot (with MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance). Also accept current_slot + 1 for clock disparity tolerance. --- .../src/inclusion_list_verification.rs | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/beacon_node/beacon_chain/src/inclusion_list_verification.rs b/beacon_node/beacon_chain/src/inclusion_list_verification.rs index 18d68d7ea7..85bc052a9a 100644 --- a/beacon_node/beacon_chain/src/inclusion_list_verification.rs +++ b/beacon_node/beacon_chain/src/inclusion_list_verification.rs @@ -57,25 +57,9 @@ impl GossipVerifiedInclusionList { return Err(GossipInclusionListError::TooManyTransactions); } - // TODO(focil): Spec says message.slot must equal current_slot with - // MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance. We currently also accept current_slot - 1 - // and add an attestation-deadline check that is not in the spec. - // See: https://github.com/ethereum/consensus-specs/blob/master/specs/heze/p2p-interface.md#inclusion_list - if message_slot != current_slot && message_slot != current_slot - 1 { - return Err(GossipInclusionListError::InvalidSlot { - message_slot, - current_slot, - }); - } - - let attestation_deadline = chain.spec.get_slot_duration() / 3; - - let inclusion_list_delay_total = - get_slot_delay_ms(timestamp_now(), message_slot, &chain.slot_clock); - - let exceeds_attestation_deadline = attestation_deadline >= inclusion_list_delay_total; - - if exceeds_attestation_deadline { + // [IGNORE] The slot `message.slot` is equal to the current slot + // (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) + if message_slot != current_slot && message_slot != current_slot + 1 { return Err(GossipInclusionListError::InvalidSlot { message_slot, current_slot,