Note: This document is a work-in-progress for researchers and implementers.
This document contains the consensus-layer networking specifications for Heze.
The specification of these changes continues in the same format as the network specifications of previous upgrades, and assumes them as pre-requisite.
| Name | Value | Description |
|---|---|---|
MAX_REQUEST_INCLUSION_LIST |
2**4 (= 16) |
Maximum number of inclusion list in a single request |
MAX_BYTES_PER_INCLUSION_LIST |
2**13 (= 8,192) |
Maximum size of the inclusion list's transactions in bytes |
def compute_fork_version(epoch: Epoch) -> Version:
"""
Return the fork version at the given ``epoch``.
"""
if epoch >= HEZE_FORK_EPOCH:
return HEZE_FORK_VERSION
if epoch >= GLOAS_FORK_EPOCH:
return GLOAS_FORK_VERSION
if epoch >= FULU_FORK_EPOCH:
return FULU_FORK_VERSION
if epoch >= ELECTRA_FORK_EPOCH:
return ELECTRA_FORK_VERSION
if epoch >= DENEB_FORK_EPOCH:
return DENEB_FORK_VERSION
if epoch >= CAPELLA_FORK_EPOCH:
return CAPELLA_FORK_VERSION
if epoch >= BELLATRIX_FORK_EPOCH:
return BELLATRIX_FORK_VERSION
if epoch >= ALTAIR_FORK_EPOCH:
return ALTAIR_FORK_VERSION
return GENESIS_FORK_VERSIONThe new topics along with the type of the data field of a gossipsub message
are given in this table:
| Name | Message Type |
|---|---|
inclusion_list |
SignedInclusionList |
Heze introduces a new global topic for inclusion lists.
This topic is used to propagate signed inclusion list as SignedInclusionList.
The following validations MUST pass before forwarding the inclusion_list on
the network, assuming the alias message = signed_inclusion_list.message:
- [REJECT] The size of
message.transactionsis within upperboundMAX_BYTES_PER_INCLUSION_LIST. - [IGNORE] The slot
message.slotis equal to the current slot (with aMAXIMUM_GOSSIP_CLOCK_DISPARITYallowance), i.e.data.slot == current_slot. - [IGNORE] The
inclusion_list_committeefor slotmessage.sloton the current branch corresponds tomessage.inclusion_list_committee_root, as determined byhash_tree_root(inclusion_list_committee) == message.inclusion_list_committee_root. - [REJECT] The validator index
message.validator_indexis within theinclusion_list_committeecorresponding tomessage.inclusion_list_committee_root. - [IGNORE] The
messageis either the first or second valid message received from the validator with indexmessage.validator_index. - [REJECT] The signature of
signed_inclusion_list.signatureis valid with respect to the validator's public key.
Protocol ID: /eth2/beacon_chain/req/inclusion_list_by_committee_indices/1/
For each successful response_chunk, the ForkDigest context epoch is
determined by compute_epoch_at_slot(signed_inclusion_list.message.slot).
Per fork_version = compute_fork_version(epoch):
fork_version |
Chunk SSZ type |
|---|---|
HEZE_FORK_VERSION |
heze.SignedInclusionList |
Request Content:
(
slot: Slot
committee_indices: Bitvector[INCLUSION_LIST_COMMITTEE_SIZE]
)
Response Content:
(
List[SignedInclusionList, MAX_REQUEST_INCLUSION_LIST]
)