Skip to content

Add the InclusionListsByIndices req/resp protocol - #10072

Open
rahulbarmann wants to merge 18 commits into
sigp:unstablefrom
rahulbarmann:focil/il-by-indices
Open

rahulbarmann wants to merge 18 commits into
sigp:unstablefrom
rahulbarmann:focil/il-by-indices

Conversation

@rahulbarmann

Copy link
Copy Markdown

Issue Addressed

Part of FOCIL (EIP-7805). This adds the InclusionListsByIndices req/resp protocol from heze/p2p-interface.md which is used by peers to fetch inclusion lists they missed on gossip.

Proposed Changes

  • Add the /eth2/beacon_chain/req/inclusion_lists_by_indices/1/ protocol and register it once Heze is scheduled. The request is a fixed 42-byte container, and each response chunk contains one SignedInclusionList. The fork digest is taken from the list's own slot.
  • Add InclusionListBits to consensus/types for the request indices, along with min_size and max_size on SignedInclusionList for the response bounds.
  • Reject requests for slots below minimum_request_slot with ResourceUnavailable, then resolve the committee to turn the requested positions into validator indices and return whatever the store has for (slot, dependent_root).
  • Add codec tests, a chunked TCP test, and three handler tests.

This is only the server side, the client side for block production backfill will be built by @conache.

Additional Info

  • I didn't add a SignedInclusionLists type. The spec has it as the response content, but since the response is chunked, I enforce the MAX_REQUEST_INCLUSION_LIST limit through max_responses instead.
  • The response size limit is calculated from the SSZ layout rather than hardcoded. There's a test that currently pins it to 41112, which matches MAX_SIGNED_INCLUSION_LIST_SIZE. Once Wire the inclusion_list gossip topic #9846 lands, this can use E::max_signed_inclusion_list_size() directly.
  • There's no separate check for the number of requested indices. InclusionListBits is 16 bits wide and MAX_REQUEST_INCLUSION_LIST is also 16, so the request can't exceed the limit anyway.
  • Add inclusion_list_bits to ExecutionPayloadBid #9729 uses a bare BitVector for the same spec type. Whichever PR lands second should switch over to the shared type.

@rahulbarmann
rahulbarmann requested a review from jxs as a code owner September 17, 2026 21:17
@eserilev eserilev added focil Fork choice enforced inclusion lists heze labels Sep 21, 2026
conache added a commit to conache/lighthouse that referenced this pull request Oct 13, 2026
conache added a commit to conache/lighthouse that referenced this pull request Oct 13, 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