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.