Skip to content

Add gossip IL bits inclusivity check for execution payload bids - #10263

Open
conache wants to merge 14 commits into
sigp:unstablefrom
conache:focil-bid-il-bits-inclusivity-check
Open

conache wants to merge 14 commits into
sigp:unstablefrom
conache:focil-bid-il-bits-inclusivity-check

Conversation

@conache

@conache conache commented Oct 8, 2026 •

Copy link
Copy Markdown

Part of the FOCIL implementation. This PR adds the inclusivity check for bid.inclusion_list_bits on the execution_payload_bid topic (per spec).

Proposed Changes

  • Add the inclusivity check of the IL bits carried by the execution payload bids received over gossip. Every non-equivocating committee member we hold a timely inclusion list from must be claimed by the received bid
  • The check is added to GossipVerifiedPayloadBid::new and satisfies the following rule (spec reference):
# [IGNORE] The bid's inclusion list bits is inclusive
   inclusion_list_slot = bid.slot - 1
   inclusion_list_epoch = compute_epoch_at_slot(inclusion_list_slot)
   if not is_inclusion_list_bits_inclusive(
       get_inclusion_list_store(),
       get_inclusion_list_committee(state, inclusion_list_slot),
       inclusion_list_slot,
       get_shuffling_dependent_root(store, bid.parent_block_root, inclusion_list_epoch),
       bid.inclusion_list_bits,
       only_timely=True,
   ):
       raise GossipIgnore("bid's inclusion list bits is not inclusive")
  • The comparison itself lives in a shared verify_bid_inclusion_list_bits helper, next to the existing checks the gossip and direct verifiers already share, with the bit comparison extracted from the inclusion list store into a pure function
  • A failing check returns PayloadBidError::InclusionListBitsNotInclusive, mapped to MessageAcceptance::Ignore in the network processor
  • This check is only applied to bids for Heze slots

Additional Info

  • This PR only covers the gossip layer verification. Bids fetched directly from builders via the builder API go through verify_direct_bid and never reach the gossip verifier.
  • sigp#10266 also applies the same shared verify_bid_inclusion_list_bits helper on the block production path. Both PRs add this helper, so whichever merges first carries it and the subsequent PR should rebase on it
  • The test harness was updated to build bids in the variant of the active fork for the slot. It also now builds the head state's caches, needed by the new tests. The payload_bid_verification/tests.rs tests pass with FORK_NAME set to either gloas or heze

@eserilev eserilev added focil Fork choice enforced inclusion lists heze labels Oct 9, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

focil Fork choice enforced inclusion lists heze

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants