Skip to content

Add inclusion list production to the validator client - #10255

Open
conache wants to merge 22 commits into
sigp:unstablefrom
conache:focil-vc-il-production
Open

conache wants to merge 22 commits into
sigp:unstablefrom
conache:focil-vc-il-production

Conversation

@conache

@conache conache commented Oct 7, 2026

Copy link
Copy Markdown

Issue Addressed

Add validator client support for producing inclusion lists for validators in the inclusion list committee (per spec).

Proposed Changes

  • Add a new InclusionListService to the VC, which only starts when the Heze fork is scheduled and idles for whole epochs until Heze activates
  • Each slot, 1s before the inclusion list deadline, the service checks the slot's IL duties and fetches the IL transactions from the BN, using GET validator/inclusion_list?slot={slot}
  • For each duty, it builds a SignedInclusionList
  • Each signed IL is published individually using POST validator/inclusion_list (beacon-APIs#490), SSZ first, using JSON as fallback
  • This PR also includes tests for the service against MockBeaconNode and adds IL mock helpers to validator_test_rig

Additional Info

  • The Beacon API endpoints are added in the following PRs:

  • Heze types don't exist in remote-signing-api yet, so Web3Signer path is defined ahead of the upstream spec. This only follows the existing message-type setup and may need adjusting later, once the Heze support lands

  • ILs are produced 1s before the IL deadline instead of at slot start. I chose this approach after trying multiple solutions. At slot start, the EL's mempool still holds the current payload's transactions, so ~92% of each IL was redundant (confirmed on a local devnet). Producing on payload reveal didn't help with this: the EL only drops those transactions after the next forkchoiceUpdated call. For this case, making the BN wait for it, although it could be a solution, adds complexity to the forkchoice update path. With this approach, tested on a local devnet, I've got no redundant txs included in the inclusion lists. Additionally, all the inclusion lists broadcast were timely. On FOCIL devnet-1 (based on 24h data), 2.7% of Lighthouse IL transactions were redundant, vs ~80% for clients producing at slot start, while 97.7% of (list, node) arrivals were timely, the late ones concentrated at a single slow node (lodestar-nethermind-1).

@eserilev eserilev added heze focil Fork choice enforced inclusion lists val-client Relates to the validator client binary labels Oct 7, 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 val-client Relates to the validator client binary

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants