Skip to content

engine: separate inclusion lists and omission claims in Bogota - #911

Draft
Marchhill wants to merge 17 commits into
ethereum:mainfrom
Marchhill:inclusion-list-claims
Draft

Marchhill wants to merge 17 commits into
ethereum:mainfrom
Marchhill:inclusion-list-claims

Conversation

@Marchhill

@Marchhill Marchhill commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Adds separate inclusion lists and bounded omission claims to Bogota's Engine API. Each committee position retains its own list and budget.

``newPayloadV6returns a completed inclusion verdict withVALID`; there is no inclusion-check ID or polling endpoint. Forkchoice reports execution validity only. Inclusion failure does not invalidate execution.

Validation: specification build/tests and OpenRPC lint pass.

Related: ethereum/EIPs#12394, ethereum/consensus-specs#5698, ethereum/execution-specs#3777.

@Marchhill Marchhill changed the title engine: add inclusion list claims and grouped inclusion lists for EIP-8369 profiles engine: inclusion list claims and grouped inclusion lists in Bogota Sep 29, 2026
@Marchhill Marchhill changed the title engine: inclusion list claims and grouped inclusion lists in Bogota engine: inclusion list claims and membership in Bogota Sep 29, 2026
Comment thread src/engine/bogota.md Outdated
- `slotNumber`: `QUANTITY`, 64 Bits - value for the `slotNumber` field of the new payload
- `targetGasLimit`: `QUANTITY`, 64 Bits - target value for the `gasLimit` field of the new payload
- `inclusionListTransactions`: `Array of DATA` - Array of transaction objects, each object is a byte list (`DATA`) representing `TransactionType || TransactionPayload` or `LegacyTransaction` as defined in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718).
- `inclusionListMembership`: `Array of DATA`, 2 Bytes - Array of inclusion list memberships, one per element of `inclusionListTransactions` at the same position. Each element is a bitvector of length `INCLUSION_LIST_COMMITTEE_SIZE`, encoded as SSZ `Bitvector[INCLUSION_LIST_COMMITTEE_SIZE]`, in which bit `i` is set if and only if the inclusion list of the inclusion list committee member at committee position `i` carries the transaction.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could this add an example? as 2 byte hex it's easy to read as a big-endian uint16, but in ssz order positions {0, 9} are 0x0102.

Comment thread src/engine/bogota.md Outdated

3. The total byte length of the transaction list **MUST NOT** exceed `MAX_TRANSACTIONS_BYTES_PER_INCLUSION_LIST`.

4. When [EIP-8141](https://eips.ethereum.org/EIPS/eip-8141) is active, the total VERIFY budget cost of the Profile 2 candidates in the transaction list **MUST NOT** exceed `MAX_VERIFY_GAS_PER_IL`, with the cost, the candidates and the constant as defined in [EIP-8369](https://eips.ethereum.org/EIPS/eip-8369).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ethereum/EIPs#12394 says SHOULD NOT for the same bound, is the difference intended? also MAX_VERIFY_GAS_PER_IL isn't in the constants table here, and eip-8369 only has a candidate value.

@Marchhill Marchhill changed the title engine: inclusion list claims and membership in Bogota engine: omission claims and membership in Bogota Oct 13, 2026
@Marchhill Marchhill changed the title engine: omission claims and membership in Bogota engine: separate inclusion lists and omission claims in Bogota Oct 14, 2026
Marchhill added a commit to NethermindEth/nethermind that referenced this pull request Oct 15, 2026
…nclusion checks

Brings Profile 2 and the Bogota engine API to ethereum/EIPs#12394 and #12396,
ethereum/execution-apis#911, ethereum/consensus-specs#5698 and
ethereum/execution-specs#3777.

- engine_newPayloadV6 and engine_newPayloadWithWitnessV6 take one inclusion
  list per committee position and omissionClaims {transactionHash,
  evaluationIndex}, replacing the flat list and its membership bitvectors.
  Each list is checked against its byte cap before deduplication; malformed
  lists or claims answer -32602.
- Inclusion is checked apart from execution. A VALID payload is answered at
  once with inclusionCheckId and the check's verdict, null while it is
  pending; engine_getInclusionListVerdictV1 polls it and answers -38007 for an
  unknown check. A check that cannot be decided is forgotten, not completed.
- engine_forkchoiceUpdatedV5 takes PayloadAttributesV5.inclusionLists and
  returns PayloadStatusV1. The retained-list answers and the queued-copy
  tracking kept for per-call lists are removed.
- engine_getPayloadV7 returns omissionClaims; the builder fills each list's
  VERIFY budget separately.
- The VERIFY fill runs per committee position over the separate lists.
- The pipeline records the gas used before each transaction whenever
  Profile 2 is active, for claims judged after execution.
- MAX_INCLUSION_LIST_CLAIMS is renamed MAX_OMISSION_CLAIMS.
… encoding

Add MAX_VERIFY_GAS_PER_TX and note that the Bogota IL shapes replace the
FOCIL devnet shapes.

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants