Skip to main content
netspecsEthereum networking

4.2.7.Inclusion-list networking

Stage
In progress
Validity
Active development outside the active set.
Sources
4 pinned sources

Inclusion lists are Hegota work in progress. The pinned Heze specification defines the wire and validation rules, but hegota is not an active fork in the repository schedule. These rules must not be presented as deployed behavior before activation.

Wire types

InclusionList:
  slot: Slot
  validator_index: ValidatorIndex
  inclusion_list_committee_root: Root
  transactions: ProgressiveList[Transaction]

SignedInclusionList:
  message: InclusionList
  signature: BLSSignature

The global inclusion_list topic carries SignedInclusionList. The inclusion list committee has INCLUSION_LIST_COMMITTEE_SIZE = 16 members. A committee member builds its list from its execution engine's mempool view, signs it under DOMAIN_INCLUSION_LIST_COMMITTEE for the list slot, and publishes it near the start of that slot.

Gossip validation

The receiver rejects a transaction list whose serialized transaction bytes exceed MAX_TRANSACTIONS_BYTES_PER_INCLUSION_LIST = 8,192, an index outside the committee, a committee root that does not equal hash_tree_root(get_inclusion_list_committee(state, slot)), or an invalid BLS signature. It ignores a list whose slot is not the current slot within the 500-millisecond clock allowance. It also ignores a third valid list from one committee member. The protocol therefore accepts at most two valid messages per member for a slot.

An accepted list is stored and forwarded. A rejected list is not forwarded and may lower the sending peer's application score. A timing miss or an already seen list is an ignore outcome, not invalid-delivery evidence.

Req/Resp recovery

/eth2/beacon_chain/req/inclusion_lists_by_indices/1/

The request is:

InclusionListsByIndices:
  slot: Slot
  inclusion_list_committee_root: Root
  indices: BitVector[INCLUSION_LIST_COMMITTEE_SIZE]

The response is List[SignedInclusionList, MAX_REQUEST_INCLUSION_LIST] with MAX_REQUEST_INCLUSION_LIST = 16. A responder returns at least one requested list when it has one and may return fewer than the selected bits. It should not serve a list that fails gossip validation or belongs to an equivocating member.

Serving starts at minimum_request_slot = max(current_slot - 1, compute_start_slot_at_epoch(HEZE_FORK_EPOCH)), because MIN_SLOTS_FOR_INCLUSION_LISTS_REQUESTS = 1. A request for an older slot may receive 3: ResourceUnavailable or an omitted list. Each successful chunk uses the fork-digest context from its list slot and the heze.SignedInclusionList SSZ type.

Bid relation

Hegota execution-payload bids carry inclusion_list_bits: BitVector[INCLUSION_LIST_COMMITTEE_SIZE]. A bid is ignored unless those bits include every timely, valid, non-equivocating list in the proposer's local store for the preceding slot. Missing lists do not weaken the local view; the proposer must recover them with Req/Resp or decline the bid. This page does not define Engine API payload construction.

Scope and status

EIP-7805 and the checked-in Heze specification define this committee, container, gossip, and recovery surface. The fork remains in progress. Client support, activation time, and execution-layer inclusion policy are not established by this networking page.