Skip to content

Update EIP-7805: Profile 2 omission claims and per-list VERIFY budget - #12394

Draft
Marchhill wants to merge 19 commits into
ethereum:masterfrom
Marchhill:eip-7805-profile-2-claims
Draft

Marchhill wants to merge 19 commits into
ethereum:masterfrom
Marchhill:eip-7805-profile-2-claims

Conversation

@Marchhill

@Marchhill Marchhill commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Defines Profile 2 omission claims, independent per-IL VERIFY budgets and indexed prefix replay alongside Profile 1, with joint FOCIL/frame activation. EIP-7805 owns the binding rules.

A VALID newPayload response includes a completed inclusion verdict; no context ID or polling endpoint is needed. Unavailable verdicts cannot authorize extending the payload. Clarifies replay code bounds, recent-root limits and re-execution costs; full-pipeline latency benchmarks remain an activation prerequisite.

Companions: #12396, ethereum/execution-apis#911, ethereum/consensus-specs#5698, ethereum/execution-specs#3777.

EIP-8288 coordination (#12475): signed ILs must authenticate their dependency proof, and versioned Engine interfaces must carry a nullable proof per list with committee-wide bounds. This additional change needs CL agreement and is not implemented by the current frames/FOCIL companion APIs.

@github-actions github-actions Bot added c-update Modifies an existing proposal s-draft This EIP is a Draft t-core labels Sep 29, 2026
@eth-bot

eth-bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

File EIPS/eip-7805.md

Requires 1 more review from Authors: @soispoke

Comment thread EIPS/eip-7805.md Outdated

### Profile 2 inclusion claims and per IL budgets

This section extends the rules above for the eligibility profiles of [EIP-8369](./eip-8369.md), and applies only when [EIP-8141](./eip-8141.md) is active. Otherwise the verdict is decided by the rules above alone. The membership bits and the claim list are carried in either case; without EIP-8141 there are no Profile 2 candidates, so neither changes the verdict. Profile 1, Profile 2, Profile 2 candidate, the static budget fill, `MAX_VERIFY_GAS_PER_IL` and the attester replay are as defined in EIP-8369. Omission of a Profile 1 transaction is decided by the end of payload check above, with the Profile 1 conditions of EIP-8369. Omission of a transaction outside both profiles is excused.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

eip-8369 is informational and leaves MAX_VERIFY_GAS_PER_TX and AA_VOPS_SLOT_COUNT unset, and MAX_VERIFY_GAS_PER_IL is a candidate value there. should this section fix the values and restate the profile 2 predicates, so clients classify the same transactions?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 5f2193d: constants table (2**20 per IL, 2**18 per tx, 4 slots, 2**12 claims) and the Profile 2 candidate/eligibility checks and replay restated as named predicates; one-line rationale per value.

Comment thread EIPS/eip-7805.md Outdated

#### VERIFY budget

The execution layer applies the EIP-8369 static budget fill to each committee position independently, with a budget of `MAX_VERIFY_GAS_PER_IL` per position, over the transactions whose bit is set at that position, in the fill order of EIP-8369. Each transaction is charged once per position. There is no budget shared across positions, so an IL whose candidates exceed the budget affects only the fill of its own position.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

get_inclusion_list_committee can give one validator several positions on a small validator set, so its one il gets a budget per position. is that intended, or should the budget be per il as in eip-8369?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Duplicate positions have identical bits, so identical fills; the IL is effectively budgeted once. Noted in c4d5f90.

Comment thread EIPS/eip-7805.md Outdated

The execution layer applies the EIP-8369 static budget fill to each committee position independently, with a budget of `MAX_VERIFY_GAS_PER_IL` per position, over the transactions whose bit is set at that position, in the fill order of EIP-8369. Each transaction is charged once per position. There is no budget shared across positions, so an IL whose candidates exceed the budget affects only the fill of its own position.

Omission of a Profile 2 candidate `T` is excused under a position whose bit is set for `T` unless that position's fill admits `T` and `T` passes the EIP-8369 attester replay at its evaluation index. Omission of `T` is excused if and only if it is excused under every position whose bit is set for `T`. Since the replay does not depend on the position, omission of `T` is unjustified if and only if some position admits `T` and `T` passes the replay at its evaluation index.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

the eip-8369 replay uses one number for the gas remaining (block gas limit minus cumulative gas used before the index). with eip-8037 the fit check is per dimension, execution and state. which totals at the evaluation index should clients use here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Agreed. "Fits" is now the EIP-8037 per-dimension check (EIP-8141's for frame txs) against execution and state gas used before the index, for both the base end-of-payload check and the Profile 2 replay (5f2193d).

Comment thread EIPS/eip-7805.md Outdated

### Profile 2 claims and budgets

A claim only changes the verdict on the committing builder's own payload. The cap on claims only limits the builder: an unclaimed candidate is evaluated at the end of the payload, which is its verdict without claims. The builder chooses the index, so a Profile 2 transaction is protected only if it stays valid at every index the builder can claim, as described in EIP-8369.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

each distinct claimed index may need its own state rebuild on the attester side. was 2**10 sized against replay time before the attestation deadline, or only against envelope size?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Replay cost is independent of the cap: each admitted omitted candidate is replayed once, claimed or not, and indices read from the BAL without per-index rebuilds. Cap is now 2**12 so a builder can always claim every candidate 16 × 8 KiB ILs can hold (≥48 B each ⇒ <2,730); ≤160 KiB of envelope (5f2193d).

Comment thread EIPS/eip-7805.md Resolved
Comment thread EIPS/eip-7805.md Resolved
Comment thread EIPS/eip-7805.md Resolved
@Marchhill Marchhill changed the title Update EIP-7805: Profile 2 inclusion claims and per-list VERIFY budget Update EIP-7805: Profile 2 omission claims and per-list VERIFY budget Oct 13, 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.
Replace the original append-at-end steps with the Profile 1 and 2 rules,
keep checks pending when local data is missing, rename IL constants to
match the specs, define the IL byte limit by envelope bytes and fix a typo.
@AnkushinDaniil

Copy link
Copy Markdown
Contributor

Rule 2 rejects a later frame only when its mode is VERIFY, so an EIP-8288 dependency frame after the declared prefix still passes is_profile_2_candidate. #12475 makes a dependency-bearing transaction obligatory only when the attester holds a committed proof by the view freeze deadline. For a candidate with a dependency frame after the prefix, which rule decides? Should rule 2 also exclude the dependency verification mode, or does the #12475 condition apply on top of Profile 2?

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

a-review Waiting on author to review c-update Modifies an existing proposal s-draft This EIP is a Draft t-core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants