feat: add heze fork definition and boilerplate#9505
Conversation
Scaffold the heze fork (post-gloas) as a gloas-copy plus the EIP-7805 inclusion-list data model: IL containers (InclusionList, SignedInclusionList, committee/request), ExecutionPayloadBid extended with inclusionListBits, and the modified BeaconState/Body/PayloadAttributes. Wires fork registration (params, config, forkConfig, ssz/type maps), upgradeStateToHeze, IBeaconStateViewHeze, and fork-specific bid signing root/storage and genesis fork versions so the bid type round-trips correctly. Enables heze spec tests (skipping the FOCIL fork-choice scenarios shared with gloas pending #9233) and validates heze config fields against the spec. Excludes FOCIL feature logic (inclusion-list pools, validation, gossip, reqresp, duties) which remains on the focil branch.
Move heze constants/presets after gloas to match fork sequence, validate the heze fork version, inclusion-list config and committee-size values against the remote spec (ensure-config-is-synced), and wire ethspecify sources for the heze constant/preset/config references so they are no longer skipped.
There was a problem hiding this comment.
Code Review
This pull request introduces the initial types, configurations, and state transition logic for the upcoming 'Heze' hard fork (EIP-7805), which implements inclusion lists. It adds Heze-specific parameters to the mainnet and minimal configurations, defines SSZ types (such as InclusionList and modified BeaconState), implements the state upgrade logic (upgradeStateToHeze), and updates spec references. However, two issues were identified: first, removing unimplemented Heze fields (VIEW_FREEZE_CUTOFF_BPS, INCLUSION_LIST_SUBMISSION_DUE_BPS, and PROPOSER_INCLUSION_LIST_CUTOFF_BPS) from the ignored remote config list in ensure-config-is-synced.test.ts will cause configuration sync tests to fail; second, a biome ignore comment is required directly preceding case ForkName.heze: in utils.ts to prevent lint/build failures from the switch-case fallthrough.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Performance Report✔️ no performance regression detected Full benchmark results
|
…snapshot Add DOMAIN_INCLUSION_LIST_COMMITTEE to the config API specConstants so the e2e config test (which scans heze spec docs) sees it exposed, and refresh the forkName snapshot to include heze (shared by the browser test via the test/browser -> ./unit symlink).
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9f70a38ca9
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@ensi321 can you address bot comments please |
- getGossipSSZType: dispatch SignedExecutionPayloadBid via sszTypesFor(fork) so heze bids include inclusionListBits instead of being decoded as gloas and rejected as invalid serialized bytes. - preparePayloadAttributes: set inclusionListTransactions to an empty list post-heze so the heze SSEPayloadAttributes container can be serialized. Aggregation pool wiring lands with the focil feature (TODO HEZE). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Resolve conflicts: - params/index.ts: keep both DOMAIN_BUILDER_DEPOSIT (gloas, 0x0E) and DOMAIN_INCLUSION_LIST_COMMITTEE (heze); fix heze domain 14 -> 16 (0x10) to match spec (both had collided on 14). Keep both request-type + committee-size consts. - api config constants.ts: export both gloas builder-deposit consts and heze DOMAIN_INCLUSION_LIST_COMMITTEE. - processExecutionPayloadBid.ts: merge imports; drop unused ForkPostGloas and BeaconBlock.
|
seems like spec tests are failing |
nflaig
left a comment
There was a problem hiding this comment.
we might wanna wait until alpha.12 since inclusion_list_bits will be there again
|
|
||
| export const ExecutionPayloadBid = new ContainerType( | ||
| { | ||
| ...gloasSsz.ExecutionPayloadBid.fields, |
There was a problem hiding this comment.
let's wait for alpha.12 so the inclusion_list_bits field is back
This reverts commit bdafb91. inclusion_list_bits is re-added to the bid post-alpha.11 (consensus-specs #5410), so removing it was a regression against the latest spec. Add the Bitvector[INCLUSION_LIST_COMMITTEE_SIZE] field back and wait for the alpha.12 spec-tests, where the field is present again. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Drop spurious `(EIP-7805)` from HEZE config comments to match the style of other forks - Remove heze redefinitions of ExecutionPayload, ExecutionPayloadHeader and the blinded block types: heze does not modify them per the alpha.12 spec, so inherit them from gloas/deneb/electra via the fork type registry (mirrors gloas, which defines none of these) - Type getExecutionPayloadBidSigningRoot's bid param with the top-level ExecutionPayloadBid instead of a gloas|heze union - Drop the `as unknown` double cast in processExecutionPayloadBid by widening through CachedBeaconStateAllForks Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
wait for #9606 to be merged. |
No description provided.