Retrospective LLM-Based Complexity Evaluations

EIP complexity assessment

EIP-7923: Linear, Page-Based Memory Costing

Assessed in Hegotá. The score describes the EIP text available at the snapshot, not the EIP as it stands today.

ProspectiveHegotáSnapshot 2026-08-25PFI at snapshotLayers: execution
LLM Completescore 23
Human Available in open PRscore 15 · Checklist revision 2· ethspecs/pm #134

Evaluated on: · Spec revision: 2026-08-25 · ac450a4ab2 · Inclusion status at snapshot: PFI

Scope at the cutoff. Draft execution-layer assessment of EIP-7923 at the sealed Hegota PFI snapshot: replacement of quadratic EVM memory expansion pricing with per-message-call page charging, 32-bit addressing, and a transaction-global 64 MiB allocated-page limit.

23HighHigh
Evaluator
LLMChecklist v2
Confidence
Medium
Under-specified at assessment cutoff
Yes — 3 criteria affected
Plausible range
21–23 (Medium–High)
Snapshot
2026-08-25 · EIP revision ac450a4ab2 (2026-08-25)
Score bands · Checklist revision 2
  • Low <12
  • Medium 12–22
  • High ≥23

28 criteria scored 0–3 (4 in exceptional cases; cross-EIP interactions is uncapped); nominal maximum 84.

Complexity profile

Each segment is one criterion's contribution to the LLM total. Hover or focus a segment for its score and rationale.

Top complexity drivers

  1. Modified opcodes3
  2. EVM Gas rule changes3
  3. Patterns affecting pre-existing tests3
  4. Security risks3

Under-specified at assessment cutoff: Yes

The EIP text available at the assessment cutoff left material behavior unresolved. The affected criteria and the plausible total range record that uncertainty.

Why: The Draft does not normatively define what each memory instruction touches, whether the transaction-global count is cumulative or the simultaneously live allocation restored after child calls, whether free page 0 counts toward the cap, or the precise address/size and failure-order rules. The example selects some behaviors but is internally incomplete and does not consistently specify all bounds.

Unresolved questions at the cutoff (4)
  • For every affected instruction, which source and destination byte ranges count as touching a page, especially for zero length, range overflow, and multi-range copy operations?
  • Does the 16384-page transaction limit count cumulative first allocations or pages simultaneously live across the active message-call stack, and exactly when are child pages released on success or revert?
  • Does free page 0 count toward the transaction limit, and is it considered already touched for MSIZE or only for charging?
  • Is the 32-bit rule applied to the start operand, every byte in the accessed range, or the exclusive end, and what exception takes precedence over page gas charging or the global limit?
Notable ambiguities noted by the assessor (4)
  • The phrase "maximum byte touched ... rounded up by 32" for MSIZE can be read as inclusive-byte or exclusive-end accounting, although the example uses ceil32(start + size).
  • The example restores transaction_context.num_pages after a child computation, a lifetime rule absent from the normative transaction-global limit text.
  • The example checks start_position + size >= 2**32 only in the write path, which does not cleanly match the normative allowance of addresses through 2**32 - 1.
  • The normative phrase "all memory instructions" gives examples but no exhaustive list or per-instruction touched ranges.

Criterion breakdown

EIP-7923 Hegotá: LLM criterion scores and rationale
CriterionScoreWhy this scoreEvidence / uncertainty
Modified opcodes3At least one pre-existing memory-using opcode gains new non-gas exceptional-halt behavior, meeting the rubric binary score of 3.
  • eip.md · Specification, address and transaction limits (lines 55-59) Existing memory operations now exceptionally halt for out-of-range addresses or when transaction-wide allocated pages exceed 16384; these are behavior changes beyond gas repricing.
Confidence: High
Uncertainty: The exact affected instruction set and boundary convention are underspecified, but the existence of modified behavior is explicit.
EVM Gas rule changes3This is a new page-history-based EVM gas mechanism that replaces the existing expansion mechanism for all memory instructions, necessarily changing existing gas expectations and tests.
  • eip.md · Specification, memory costing algorithm (lines 41-54) Untouched pages cost 100 gas when first touched in a message call, page 0 is free, and the existing linear and quadratic expansion terms are removed.
Confidence: High
Uncertainty: The exact instruction coverage and touch ordering are underspecified, but the replacement of the existing gas mechanism is explicit and fixes this anchor at 3.
Patterns affecting pre-existing testsUnder-specified3Gas and outcome vectors across the broad, diverse class of existing memory-using opcode and nested-call tests must be reworked, rather than only a narrow contrived category.
  • eip.md · Specification, memory costing algorithm (lines 49-59) Every memory instruction moves from high-water linear/quadratic expansion pricing to first-touch page pricing, with new exceptional-halt limits.
  • eip.md · Backwards Compatibility and Security Considerations (lines 89-91, 328-338) Some contracts that formerly ran out of gas may complete, and the proposal explicitly raises contract-compatibility and memory-DoS questions.
Confidence: Medium
Uncertainty: The Test Cases section is empty, so the package does not quantify the affected corpus or enumerate all memory instructions.
Security risks3Gas metering, memory allocation, exceptional halts, and nested message calls are critical interacting components; incorrect implementation could enable resource exhaustion or consensus-divergent execution and warrants extensive review and fuzzing.
  • eip.md · Security Considerations (lines 328-338) The proposal identifies compatibility changes for contracts that used to run out of gas and asks whether the new model enables client memory-based denial of service.
  • eip.md · Specification (lines 49-59) Security-sensitive controls span per-call page pricing, a 32-bit address cap, and a transaction-global page limit.
Confidence: High
Uncertainty: The EIP provides only a coarse maximum-memory comparison and does not resolve the detailed limit semantics needed for a complete security analysis.
Performance risks3Core memory behavior, OS allocation strategy, page tracking, and nested-call resource limits have substantial and complex interactions with existing execution performance that cannot be validated by isolated microbenchmarks alone.
  • eip.md · Motivation, implementation approaches, and Rationale (lines 17-37, 61-87) The proposal replaces contiguous growth with sparse pages or a 4 GiB virtual mapping, tracks page sets, cites allocation/cache/TLB benchmarks, and permits up to 64 MiB across active calls.
  • eip.md · Security Considerations (lines 328-338) The EIP explicitly requires maximum-memory analysis and evaluates recursive calls allocating memory across the call stack.
Confidence: High
Uncertainty: Only selected microbenchmarks and a rough maximum-memory comparison are supplied; no end-to-end workload results are in the package.
Edge/boundary conditionsUnder-specified3Multiple boundary-prone mechanisms interact across zero-length accesses, cross-page ranges, maximum addresses, gas exhaustion, and nested calls; at least the transaction-global cap and page-touch matrix require elevated case counts.
  • eip.md · Specification (lines 41-59) Consensus boundaries include free page 0, 4096-byte page crossings, repeated first touches, 32-bit addresses, and the 16384-page transaction limit.
  • eip.md · Reference Implementation, memory extension and write paths (lines 136-159, 242-312) The example handles zero sizes, computes inclusive end pages, tracks per-call pages, and contains a separate end-address check, exposing several boundary paths.
Confidence: High
Uncertainty: The normative text does not settle several off-by-one, lifetime, and failure-order cases, increasing rather than removing the boundary burden.
Unspecified behavior requiring cross-client consensusUnder-specified3Exact per-page touch history was not previously a consensus-visible gas dimension, but now determines charges and halts. The unresolved definitions therefore make previously unobservable details consensus-critical and require re-baselining as the draft is clarified.
  • eip.md · Specification and empty Test Cases section (lines 49-59, 93-94) The normative text uses "page touched" and "pages allocated in a transaction" without defining exact touch ranges, lifetime/counting, failure ordering, or boundary cases, and supplies no tests.
  • eip.md · Reference Implementation (lines 136-159, 185-200, 242-312) The example makes particular choices about zero size, inclusive end pages, restoring child page counts, and an end-address comparison that are not all stated normatively and includes an incomplete allocated-pages assertion.
Confidence: High
Uncertainty: The package prohibits discussion-thread, implementation, devnet, and later-revision evidence, so the score is based solely on the material gaps visible in the sealed Draft text.
Cross-EIP interactions2EIP-7923 modifies the memory-expansion term used around EIP-150 call gas forwarding and adds a limit spanning nested calls, requiring coordinated but limited cross-EIP gas and call-depth tests.
  • eip.md · Motivation (line 22) and Rationale (lines 78-82) The proposal explicitly frames total memory through recursive message calls under EIP-150 gas forwarding and makes the new memory limit transaction-global rather than call-local.
  • supporting/eip-150.md · Specification, all-but-one-64th call gas rule EIP-150 computes forwarded call gas after subtracting call cost and memory expansion, directly coupling the replaced memory charge to nested-call gas availability.
Confidence: High
Uncertainty: EIP-150 is the only numbered interaction established by the package; no other EIPs are inferred.
Interacting EIPs: EIP-150
Show 20 zero-score criteria
Zero-score criteria (Checklist revision 2)
CriterionScoreWhy this scoreEvidence / uncertainty
Added opcodes0No opcode is added.
  • eip.md · Specification (lines 49-59) The proposal applies new rules to existing memory instructions and retains MSIZE semantics; it allocates no new opcode.
Uncertainty: No opcode number or new instruction semantics are present.
Added precompiles0No precompile is added.
  • eip.md · Specification (lines 39-59) No precompile address, input contract, or gas schedule is introduced.
Uncertainty: The proposal contains no precompile mechanism.
Modified precompiles0Call-site memory expansion is not a modification to a precompile itself under this anchor.
  • eip.md · Specification (lines 49-59) Generic EVM memory charging changes, but no pre-existing precompile logic or precompile gas schedule is modified.
Uncertainty: No precompile is named in the sealed evidence.
Added system contracts0No system contract is added.
  • eip.md · Specification (lines 39-59) The memory rules are implemented in EVM execution and do not deploy or designate a contract.
Uncertainty: No contract address, code, state, or system action is specified.
Modified system contracts0The package provides no grounded direct or indirect system-contract modification to score.
  • eip.md · Specification and Reference Implementation (lines 39-59, 95-325) All described changes are to generic computation, memory, and transaction-context logic; no pre-existing system contract is identified or modified.
Uncertainty: The package contains no system-contract inventory; prohibited external knowledge was not used to infer an interaction.
State-access ordering within opcode execution0Page touches concern EVM memory, not chain state, so no state-access ordering within an opcode is changed.
  • eip.md · Abstract and Specification (lines 13-15, 39-59) The proposal changes volatile EVM memory costing and limits; it introduces no state access or gas ordering relative to a state access.
Uncertainty: No package evidence identifies a state-accessing operation in scope.
Blob gas accounting changes0No blob gas rule is introduced or modified.
  • eip.md · Specification (lines 39-59) The complete normative change is limited to EVM memory page pricing, address width, and an allocated-memory limit.
Uncertainty: No blob mechanism appears in the package evidence.
State gas accounting changes0EVM memory allocation gas is execution gas, not the rubric-defined gas for writing state.
  • eip.md · Specification (lines 39-59) The proposal meters transient EVM memory pages and does not charge state writes or alter a state-gas budget or spill path.
Uncertainty: No state-gas facility is mentioned in the sealed proposal.
New EVM gas refund0No new gas-refund mechanism is introduced.
  • eip.md · Specification, memory costing algorithm (lines 49-59) The algorithm only charges gas and raises exceptional halts; it defines no refund.
Uncertainty: No refund behavior is stated or implied by page deallocation.
New transaction types0No new transaction type is introduced.
  • eip.md · Front matter and Specification (lines 1-10, 39-59) This Core EVM memory proposal defines no transaction envelope or transaction type.
Uncertainty: No transaction-type identifier or fields are specified.
New or modified transaction validity mechanisms0Runtime memory failure is distinct from transaction admission validity under this anchor.
  • eip.md · Specification (lines 49-59) The new limits produce exceptional halts during EVM execution; they do not change transaction validity or intrinsic gas calculation.
Uncertainty: No transaction validation rule is stated.
New block / header fields0No new block or block-header field is introduced.
  • eip.md · Specification (lines 39-59) All new values are constants or per-execution accounting; no block or header field is defined.
Uncertainty: The proposal does not alter block structure.
Encoding changes (RLP/SSZ)0No RLP, SSZ, or other interface-level encoding change is introduced.
  • eip.md · Specification (lines 39-59) The proposal changes runtime memory accounting without altering transaction, block, or interface encoding.
Uncertainty: No encoding format appears in the normative change.
Block syncing changes0There is no new RLP validation mechanism requiring client syncing tests.
  • eip.md · Specification (lines 39-59) No block RLP field or block-validation encoding rule is introduced; the change occurs during EVM execution.
Uncertainty: No block serialization change appears in the package.
New fork activation mechanism0No existing state or internal variable is modified specially at the activation block, and initialization of a new variable is excluded by the rubric.
  • eip.md · Specification and Reference Implementation, transaction context (lines 39-59, 313-325) The proposal has no activation-block state transition; the example merely initializes a new per-transaction page counter to zero.
Uncertainty: Fork-choice or activation plumbing is expressly absent from the reference implementation.
Engine API changes0No Engine API change is introduced.
  • eip.md · Specification (lines 39-59) The proposal defines no Engine API endpoint, field, or communication mechanism.
Uncertainty: Engine API behavior is outside the stated proposal surface.
Transition-tool interface changes0The execution change can be derived from ordinary transaction execution without a new transition-tool interface field or mechanism.
  • eip.md · Specification and Reference Implementation (lines 39-59, 313-325) The only new counter shown is internal transaction-context state; no transition-tool input or output field is defined.
Uncertainty: No transition-tool interface is discussed in the package.
New invariant on pre-existing tests0Existing gas and outcome tests may need changed expectations, which belongs to the prior anchor; they do not gain a separate universal assertion.
  • eip.md · Specification (lines 49-59) The transaction-global page ceiling changes execution behavior but the EIP specifies no new result or artifact that unrelated tests must additionally assert.
Uncertainty: The empty Test Cases section provides no explicit assertion plan, but no externally assertable invariant is specified.
New test-framework primitives0The sealed proposal does not establish a need for a new test-framework abstraction beyond constructing calls and checking gas or halt results.
  • eip.md · Test Cases (lines 93-94) and Specification (lines 49-59) No test cases or new expectation, modifier, or helper primitive are specified; observable gas use and exceptional halts are ordinary execution outcomes.
Uncertainty: Because the Test Cases section is empty, framework needs are not demonstrated; this score does not assume unprovided infrastructure.
Cryptography0No cryptography mechanism is added or modified.
  • eip.md · Abstract and Specification (lines 13-15, 39-59) The feature consists of memory address, page-accounting, gas, and limit rules and introduces no cryptographic operation.
Uncertainty: The rationale uses keccak256 only as a benchmark calibration reference, not as a cryptographic protocol change.
Assessment provenance
Assessed EIP revision
ethereum/EIPs@ac450a4ab2 EIPS/eip-7923.md committed 2026-08-25 · information cutoff 2026-08-25T11:56:58Z
Current master · File history · blob 474d96e62f · sha256 38077cfd67ba
Rubric
Checklist revision 2 · ethspecs/pm@3d8c0128c5
Evaluator
gpt-5.6-sol at xhigh reasoning effort · isolation bubblewrap_one_eip_capsule_v1
Source record
Frozen research record research/tasks/08-hegota-prospective-complexity-assessment/outputs/assessments/hegota-pfi-2026-08-26/eip-7923.yaml · sha256 c9a7a0db1b1a
Supporting documents in the sealed package
supporting/eip-150.md

Evaluated on: Not recorded

15MediumMedium
Evaluator
HumanChecklist v2
Confidence
Not recorded
Under-specified at assessment cutoff
Not recorded in the checklist
Checklist published
2026-08-25
Score bands · Checklist revision 2
  • Low <12
  • Medium 12–22
  • High ≥23

28 criteria scored 0–3 (4 in exceptional cases; cross-EIP interactions is uncapped); nominal maximum 84.

Complexity profile

Each segment is one criterion's contribution to the Human total. Hover or focus a segment for its score and rationale.

Top complexity drivers

  1. EVM Gas rule changes3
  2. Patterns affecting pre-existing tests3
  3. New test-framework primitives3
  4. Edge/boundary conditions3

Criterion breakdown

EIP-7923 Hegotá: Human criterion scores and rationale
CriterionScoreWhy this scoreNotes
EVM Gas rule changes3Deletes the linear and quadratic memory terms and replaces them with a 100-gas charge per newly touched 4 KiB page. Repricing reaches all 18 memory-expanding opcodes, and page 0 being free makes `MSTORE(0, x)` cost 3 instead of 6.
Patterns affecting pre-existing tests31982 test files pair a memory-expanding opcode with an exact-gas expectation: 1831 in `tests/ported_static/`, 151 hand-written across 14 forks plus `tests/benchmark/`. Also, a single MSTORE(x, 1) can no longer cause an OOG, which is one of the go-to ways that tests use to produce one.
New test-framework primitives3`MemoryExpansionGasCalculator` is `(new_bytes, previous_bytes) -> int`, a pure function of sizes. Page cost depends on which offsets are touched and on what the frame touched before, so the protocol, the `new_memory_size`/`old_memory_size` opcode metadata and its six per-EIP consumers all need a page-aware replacement that stays fork-scoped.
Edge/boundary conditions3Memory allocation change from continuous to sparse: an instruction pays only for the pages its own range covers, so touching page 1000 leaves pages 1-999 unallocated. On top of that, page-crossing reads and writes on 18 opcodes, free page 0 against paid page 1, first touch against re-touch, the 2**32 address halt, the 16384-page transaction halt, and `MCOPY` with source and destination straddling different pages.
Performance risks2Memory benchmark tests need to be written from the ground up to cover the new memory allocation mechanism.
Security risks1Small risk: contracts that previously ran out of gas by memory allocation, potentially now will not, therefore it's worth exploring if this could be an issue with currently existing contracts.
Show 22 zero-score criteria
Zero-score criteria (Checklist revision 2)
CriterionScoreWhy this scoreNotes
Added opcodes0No rationale recorded.
Blank cell read as zero because the published total proves it.
Modified opcodes0Row excludes gas changes, accounted for in the first row.
Added precompiles0No rationale recorded.
Blank cell read as zero because the published total proves it.
Modified precompiles0No rationale recorded.
Blank cell read as zero because the published total proves it.
Added system contracts0No rationale recorded.
Blank cell read as zero because the published total proves it.
Modified system contracts0No rationale recorded.
Blank cell read as zero because the published total proves it.
State-access ordering within opcode execution0No rationale recorded.
Blob gas accounting changes0No rationale recorded.
Blank cell read as zero because the published total proves it.
State gas accounting changes0No rationale recorded.
Blank cell read as zero because the published total proves it.
New EVM gas refund0No rationale recorded.
Blank cell read as zero because the published total proves it.
New transaction types0No rationale recorded.
Blank cell read as zero because the published total proves it.
New or modified transaction validity mechanisms0No rationale recorded.
Blank cell read as zero because the published total proves it.
New block / header fields0No rationale recorded.
Blank cell read as zero because the published total proves it.
Encoding changes (RLP/SSZ)0No rationale recorded.
Blank cell read as zero because the published total proves it.
Block syncing changes0No rationale recorded.
Blank cell read as zero because the published total proves it.
New fork activation mechanism0No rationale recorded.
Blank cell read as zero because the published total proves it.
Engine API changes0No rationale recorded.
Blank cell read as zero because the published total proves it.
Transition-tool interface changes0No rationale recorded.
Blank cell read as zero because the published total proves it.
New invariant on pre-existing tests0No rationale recorded.
Cryptography0No rationale recorded.
Blank cell read as zero because the published total proves it.
Cross-EIP interactions0No rationale recorded.
Unspecified behavior requiring cross-client consensus0No rationale recorded.
Blank cell read as zero because the published total proves it.
Assessment provenance
Rubric
Checklist revision 2 · ethspecs/pm@3d8c0128c5
Evaluator
STEEL team · ethspecs/pm complexity_assessments
Source record
Open pull request #134: Add EIP-7923 complexity assessment · checklist at 5f85492e08 · updated 2026-08-25
blob 77392502f7 · sha256 e6260a5df1eb
Research record
research/tasks/09-hegota-human-assessment-snapshot/outputs/assessments/eip-7923.yaml · sha256 f1e40df99521

Both assessments applied Checklist revision 2 (28 criteria) to EIP-7923 in Hegotá. Δ is LLM minus Human.

Using the latest scored LLM evaluation for this checklist: 2026-08-26 · spec 2026-08-25 · ac450a4ab2. The Human and LLM assessments may use different spec revisions.

LLM23High
Human15Medium
Δ total+8Tiers differ: High vs Medium
Criteria22/28agree exactly · 1 differ by 1 · 5 differ by 2+

Complexity profiles side by side

LLM
Human

Largest disagreements: New test-framework primitives (−3), Modified opcodes (+3), Unspecified behavior requiring cross-client consensus (+3), Security risks (+2), Cross-EIP interactions (+2)

Per-criterion scores, Human versus LLM, ordered by the size of the difference
CriterionLLMHumanΔAgreementRationale from each source
Modified opcodes30+3Differ by 2+
Show rationale

LLM At least one pre-existing memory-using opcode gains new non-gas exceptional-halt behavior, meeting the rubric binary score of 3.

Human Row excludes gas changes, accounted for in the first row.

New test-framework primitives03−3Differ by 2+
Show rationale

LLM The sealed proposal does not establish a need for a new test-framework abstraction beyond constructing calls and checking gas or halt results.

Human `MemoryExpansionGasCalculator` is `(new_bytes, previous_bytes) -> int`, a pure function of sizes. Page cost depends on which offsets are touched and on what the frame touched before, so the protocol, the `new_memory_size`/`old_memory_size` opcode metadata and its six per-EIP consumers all need a page-aware replacement that stays fork-scoped.

Unspecified behavior requiring cross-client consensus30+3Differ by 2+
Show rationale

LLM Exact per-page touch history was not previously a consensus-visible gas dimension, but now determines charges and halts. The unresolved definitions therefore make previously unobservable details consensus-critical and require re-baselining as the draft is clarified.

Human No rationale recorded.

Security risks31+2Differ by 2+
Show rationale

LLM Gas metering, memory allocation, exceptional halts, and nested message calls are critical interacting components; incorrect implementation could enable resource exhaustion or consensus-divergent execution and warrants extensive review and fuzzing.

Human Small risk: contracts that previously ran out of gas by memory allocation, potentially now will not, therefore it's worth exploring if this could be an issue with currently existing contracts.

Cross-EIP interactions20+2Differ by 2+
Show rationale

LLM EIP-7923 modifies the memory-expansion term used around EIP-150 call gas forwarding and adds a limit spanning nested calls, requiring coordinated but limited cross-EIP gas and call-depth tests.

Human No rationale recorded.

Performance risks32+1Differ by 1
Show rationale

LLM Core memory behavior, OS allocation strategy, page tracking, and nested-call resource limits have substantial and complex interactions with existing execution performance that cannot be validated by isolated microbenchmarks alone.

Human Memory benchmark tests need to be written from the ground up to cover the new memory allocation mechanism.

Added opcodes000Agree
Show rationale

LLM No opcode is added.

Human No rationale recorded.

Added precompiles000Agree
Show rationale

LLM No precompile is added.

Human No rationale recorded.

Modified precompiles000Agree
Show rationale

LLM Call-site memory expansion is not a modification to a precompile itself under this anchor.

Human No rationale recorded.

Added system contracts000Agree
Show rationale

LLM No system contract is added.

Human No rationale recorded.

Modified system contracts000Agree
Show rationale

LLM The package provides no grounded direct or indirect system-contract modification to score.

Human No rationale recorded.

EVM Gas rule changes330Agree
Show rationale

LLM This is a new page-history-based EVM gas mechanism that replaces the existing expansion mechanism for all memory instructions, necessarily changing existing gas expectations and tests.

Human Deletes the linear and quadratic memory terms and replaces them with a 100-gas charge per newly touched 4 KiB page. Repricing reaches all 18 memory-expanding opcodes, and page 0 being free makes `MSTORE(0, x)` cost 3 instead of 6.

State-access ordering within opcode execution000Agree
Show rationale

LLM Page touches concern EVM memory, not chain state, so no state-access ordering within an opcode is changed.

Human No rationale recorded.

Blob gas accounting changes000Agree
Show rationale

LLM No blob gas rule is introduced or modified.

Human No rationale recorded.

State gas accounting changes000Agree
Show rationale

LLM EVM memory allocation gas is execution gas, not the rubric-defined gas for writing state.

Human No rationale recorded.

New EVM gas refund000Agree
Show rationale

LLM No new gas-refund mechanism is introduced.

Human No rationale recorded.

New transaction types000Agree
Show rationale

LLM No new transaction type is introduced.

Human No rationale recorded.

New or modified transaction validity mechanisms000Agree
Show rationale

LLM Runtime memory failure is distinct from transaction admission validity under this anchor.

Human No rationale recorded.

New block / header fields000Agree
Show rationale

LLM No new block or block-header field is introduced.

Human No rationale recorded.

Encoding changes (RLP/SSZ)000Agree
Show rationale

LLM No RLP, SSZ, or other interface-level encoding change is introduced.

Human No rationale recorded.

Block syncing changes000Agree
Show rationale

LLM There is no new RLP validation mechanism requiring client syncing tests.

Human No rationale recorded.

New fork activation mechanism000Agree
Show rationale

LLM No existing state or internal variable is modified specially at the activation block, and initialization of a new variable is excluded by the rubric.

Human No rationale recorded.

Engine API changes000Agree
Show rationale

LLM No Engine API change is introduced.

Human No rationale recorded.

Transition-tool interface changes000Agree
Show rationale

LLM The execution change can be derived from ordinary transaction execution without a new transition-tool interface field or mechanism.

Human No rationale recorded.

Patterns affecting pre-existing tests330Agree
Show rationale

LLM Gas and outcome vectors across the broad, diverse class of existing memory-using opcode and nested-call tests must be reworked, rather than only a narrow contrived category.

Human 1982 test files pair a memory-expanding opcode with an exact-gas expectation: 1831 in `tests/ported_static/`, 151 hand-written across 14 forks plus `tests/benchmark/`. Also, a single MSTORE(x, 1) can no longer cause an OOG, which is one of the go-to ways that tests use to produce one.

New invariant on pre-existing tests000Agree
Show rationale

LLM Existing gas and outcome tests may need changed expectations, which belongs to the prior anchor; they do not gain a separate universal assertion.

Human No rationale recorded.

Edge/boundary conditions330Agree
Show rationale

LLM Multiple boundary-prone mechanisms interact across zero-length accesses, cross-page ranges, maximum addresses, gas exhaustion, and nested calls; at least the transaction-global cap and page-touch matrix require elevated case counts.

Human Memory allocation change from continuous to sparse: an instruction pays only for the pages its own range covers, so touching page 1000 leaves pages 1-999 unallocated. On top of that, page-crossing reads and writes on 18 opcodes, free page 0 against paid page 1, first touch against re-touch, the 2**32 address halt, the 16384-page transaction halt, and `MCOPY` with source and destination straddling different pages.

Cryptography000Agree
Show rationale

LLM No cryptography mechanism is added or modified.

Human No rationale recorded.

Criterion legend and glossary

Every stacked bar, comparison matrix, and criterion table on this site uses the same criterion colours, abbreviations, and order. Colour marks the criterion group; the abbreviation and name identify the criterion. Scores are 0–3 per criterion (4 is exceptional; cross-EIP interactions is uncapped).

EVM surface

Opcodes, precompiles, and system contracts that are added or modified.

  • Added opcodes
    Introduces new opcodes
    Score anchors
    0
    No new opcodes are introduced.
    1
    A new simple opcode is introduced (no data portion, no complex stack mechanics, and a constant gas cost).
    2
    Multiple new simple opcodes are introduced, or a single new complex opcode is introduced (has data portion, or complex stack mechanics, or a dynamic gas cost).
    3
    Multiple new opcodes are introduced, and at least one of them is complex (has data portion, or complex stack mechanics, or a dynamic gas cost).
    • Cryptography opcodes are not considered complex by default. Refer to the "Cryptography" section for a separate assessment.
  • Modified opcodes
    Modifies pre-existing opcodes
    Score anchors
    0
    No pre-existing opcode modifications are introduced.
    3
    At least one pre-existing opcode's behavior is modified (not including gas changes) or a pre-existing opcode is deprecated.
  • Added precompiles
    Introduces new precompiles
    Score anchors
    0
    No new precompiles are introduced.
    1
    A new simple precompile is introduced (constant input length, constant gas cost).
    2
    Multiple new simple precompiles are introduced, or a single new complex precompile is introduced (dynamic input length or dynamic gas cost).
    3
    Multiple new precompiles are introduced, and at least one of them is complex (dynamic input length or dynamic gas cost).
    • Cryptography precompiles are not considered complex by default. Refer to the "Cryptography" for a separate assessment.
  • Modified precompiles
    Modifies pre-existing precompiles logic or gas-accounting
    Score anchors
    0
    No pre-existing precompiles are modified.
    1
    At least one pre-existing precompile has its gas schedule modified.
    2
    Multiple pre-existing precompiles have their gas schedule modified, or a single pre-existing precompile has its behavior modified.
    3
    The behavior of multiple pre-existing precompiles, or a single complex pre-existing precompile modified.
  • Added system contracts
    Introduces new system contract, stateful or not
    Score anchors
    0
    No new system contracts are introduced.
    1
    A new system contract is introduced that is not stateful nor does it trigger a new system action (e.g. requests to the consensus layer).
    2
    Multiple new system contracts are introduced or a single new system contract that is either stateful or triggers a new system action (e.g. requests to the consensus layer).
    3
    Multiple new system contracts are introduced and at least one of them is either stateful or triggers a new system action (e.g. requests to the consensus layer).
  • Modified system contracts
    Modifies pre-existing system contracts
    Score anchors
    0
    No modifications to pre-existing system contracts are introduced, directly or indirectly.
    1
    Does not directly modify any system contract, but its behavior has minor indirect effects on one or more system contracts.
    2
    Does not directly modify any system contract, but its behavior has major indirect effects on one or more system contracts.
    3
    At least one pre-existing system contract code or state is modified, which would involve irregular state transition or a similarly complex transition methodology.

Gas and accounting

Execution, blob, and state gas rules, refunds, and where charges happen inside opcodes.

  • EVM Gas rule changes
    New EVM gas accounting rules
    Score anchors
    0
    No gas accounting changes.
    1
    Existing gas accounting mechanism is updated.
    2
    A new gas accounting mechanism is introduced but it does not affect existing mechanisms nor does it affect existing tests.
    3
    A new gas accounting mechanism is introduced and affects existing mechanisms which in turn affect existing tests.
  • State-access ordering within opcode execution · Checklist revision 2 only
    Changes *where inside an opcode's execution* state is accessed, or where gas is charged relative to that access. Because a state access is recorded in the block-level access list only if execution had enough gas to reach it, this ordering is consensus-critical: moving it changes the BAL at every gas boundary of every affected opcode.
    Score anchors
    0
    No change to where state is accessed, or to where gas is charged relative to a state access, within any opcode.
    1
    A single opcode's state-access or gas-charge ordering changes.
    2
    Multiple opcodes' ordering changes, or a new state-accessing operation is introduced whose position in the order must be settled.
    3
    The ordering rule changes for a whole class of state-accessing opcodes at once, or what counts as a recordable state access is redefined — requiring existing BAL vectors to be re-derived across opcodes and forks.
    • Distinct from "Modified opcodes", which asks whether an opcode's **result** changed. This row asks about the **path to the result**, which is observable even when the result is identical. An EIP can be 0 on that row and 3 on this one.
    • Score changes **to** the ordering. Do not score the fact that state accesses are observable — they always are.
    • Each boundary must be re-tested against every other dimension that can change the answer (cold/warm, static/non-static, delegated/direct, revert/success), so the case count grows multiplicatively rather than additively. Note this explicitly under Special Considerations.
  • Blob gas accounting changes
    New Blob gas accounting rules which potentially affect pre-existing tests
    Score anchors
    0
    No blob gas accounting changes.
    1
    Existing blob gas accounting mechanism is updated.
    2
    A new blob gas accounting mechanism is introduced but it does not affect existing mechanisms nor does it affect existing tests.
    3
    A new blob gas accounting mechanism is introduced and affects existing mechanisms which in turn affect existing tests.
  • State gas accounting changes · Checklist revision 2 only
    New state gas accounting rules. State gas is the cost of *writing* state, as opposed to accessing or executing it: `StateGasCosts`, `COST_PER_STATE_BYTE`, the block-level state gas budget, and the spill path into execution gas.
    Score anchors
    0
    No state gas accounting changes.
    1
    An existing state gas cost or `STATE_BYTES_PER_*` rate is adjusted.
    2
    A new state-gas-charging site is introduced, or the block-level state gas budget or reservoir allocation is modified.
    3
    A new state gas charging mechanism is introduced, or the spill interaction between state gas and execution gas is modified, affecting existing gas tests.
    • Harder to test than blob gas: the spill path means state gas cannot be metered independently of execution gas, and some costs (e.g. `NEW_ACCOUNT`) are state-dependent.
  • New EVM gas refund
    New gas-refund mechanism
    Score anchors
    0
    No new gas-refund mechanisms are introduced.
    1
    A new simple gas-refund mechanism is introduced that does not affect either existing tests or existing gas-refund mechanisms.
    2
    A new complex gas-refund mechanism is introduced or a simple mechanism that affects existing tests or existing gas-refund mechanisms.
    3
    A new complex gas-refund mechanism is introduced that affects existing tests or existing gas-refund mechanisms.

Blocks, transactions, and encoding

Transaction types and validity, block and header fields, encodings, syncing, and activation-time changes.

  • New transaction types
    Introduces a new transaction type
    Score anchors
    0
    No new transaction types are introduced.
    3
    A new transaction type is introduced.
  • New or modified transaction validity mechanisms
    Creates new or modifies pre-existing transaction types' validation mechanisms
    Score anchors
    0
    No changes are introduced to the validity rules of existing transaction types or to their intrinsic gas cost calculation.
    1
    Minor adjustments are introduced to validity rules or intrinsic gas cost calculation, but they do not significantly affect existing tests.
    2
    Changes to validity rules or intrinsic gas cost calculation affect existing tests, but require only limited updates to test cases and no redesign of the testing infrastructure.
    3
    Changes to validity rules or intrinsic gas cost calculation require extensive rework or redesign of the tests or testing infrastructure.
  • New block / header fields
    Introduces new block or block header fields
    Score anchors
    0
    No new block or header fields are introduced.
    3
    A new block or header field is introduced.
  • Encoding changes (RLP/SSZ)
    Introduces encoding changes at the transaction/block/interfaces level
    Score anchors
    0
    No encoding changes are introduced at the transaction, block, or interfaces levels.
    3
    An encoding change is introduced at transaction, block or interfaces level (e.g. RLP -> SSZ).
    • "Interfaces level" includes the Engine API. Score an Engine API encoding change (e.g. JSON -> SSZ) here.
  • Block syncing changes
    Modifies block RLP validation mechanisms that require test client syncing.
    Score anchors
    0
    No new RLP validation mechanism is introduced.
    1
    A single simple RLP validation mechanism is introduced.
    2
    Multiple simple RLP validation mechanisms are introduced or a single complex one.
    3
    Multiple RLP validation mechanisms are introduced and at least one of them is deemed complex.
  • New fork activation mechanism
    Modifies state, internal variables, or similar, at the fork activation block
    Score anchors
    0
    No state modifications, internal variables or similar are modified at the fork activation block.
    3
    Either a state modification or internal variables are modified at the fork activation block.
    • Initialization of new internal variable is not considered a modification.

Client interfaces

Engine API and transition-tool interface changes.

  • Engine API changes
    Introduces new fields to the Engine API directives
    Score anchors
    0
    No new fields or communication mechanisms are introduced to the Engine API.
    1
    A single new field is introduced in one of the Engine API endpoints.
    2
    Multiple fields are introduced to one or multiple Engine API end points, or a new Engine API end-point is introduced.
    3
    Multiple fields are introduced to one or multiple Engine API end points and a new Engine API end-point is introduced.
  • Engine API encoding changes · Checklist revision 1 only
    Engine API encoding changes (the revision-1 template defines no anchor text for this row).
  • Transition-tool interface changes
    Modifies or adds new fields to the transition tool interface.
    Score anchors
    0
    No modifications to the transition tool interface are required.
    1
    A single new field needs to be introduced to the transition tool interface.
    2
    Multiple new fields or a new mechanism has to be introduced to the transition tool interface.
    3
    Multiple new fields and a new mechanism has to be introduced to the transition tool interface.
    • Special consideration must be paid to this section if the EIP introduces a mechanism that requires the state transition tool to be aware whether the block it is processing is the fork-activation block.

Testing impact

Rework, new invariants, and new primitives required in the test framework.

  • Patterns affecting pre-existing tests
    Implements a new validation mechanism or rule that translates in reworking pre-existing tests
    Score anchors
    0
    No pre-existing tests are affected by this change.
    1
    Minor subset of existing tests are affected by this change.
    2
    Considerable subset of existing tests are affected by this change but involves only a contrived category of tests.
    3
    Major subset of existing tests are affected, including diverse category of tests (benchmarks, static, multiple forks, etc.).
  • New invariant on pre-existing tests · Checklist revision 2 only
    Tests that are **not about this EIP** must nonetheless assert something this EIP produces. Their logic does not change; they gain a new thing to check.
    Score anchors
    0
    Pre-existing tests assert nothing new.
    1
    A narrow, contrived category of pre-existing tests gains a new assertion.
    2
    A broad category gains a new assertion, applied mechanically.
    3
    Every test in the fork gains the assertion regardless of what it tests, and pre-fork vectors must be re-derived to satisfy it.
    • Paired with the row above, and easy to confuse with it. "Patterns affecting pre-existing tests" asks whether existing tests must be **reworked**; this row asks whether they must **additionally assert something new**. Score both — an EIP can be low on one and high on the other.
  • New test-framework primitives · Checklist revision 2 only
    Requires new abstractions in the test framework itself — expectation types, modifiers, helpers — beyond writing test functions with what already exists.
    Score anchors
    0
    Existing test primitives suffice.
    1
    Existing primitives need minor extension.
    2
    New expectation or modifier primitives are required, reusable within this EIP's own test suite.
    3
    New framework-level primitives are required that become a permanent part of the framework and are used by other EIPs' tests.

Risk and validation

Security, performance, boundary conditions, and cryptography that need validation.

  • Security risks
    Introduces or modifies mechanisms that could compromise the security of the chain, users, validators, or other stakeholders, if not implemented properly.
    Score anchors
    0
    No new mechanisms are introduced that could pose a security risk.
    1
    The introduced mechanisms are self-contained, can be validated in isolation, and do not alter existing invariants that could pose a security risk for any stakeholders.
    2
    The introduced mechanisms interact with a limited number of existing components, slightly altering their security assumptions and requiring a targeted security review or fuzzing.
    3
    The introduced mechanisms interact with multiple existing components, including critical ones, substantially altering their security assumptions and requiring an extensive security review and fuzzing.
  • Performance risks
    Introduces or modifies mechanisms and requires performance validation.
    Score anchors
    0
    No new mechanisms are introduced that require performance validation.
    1
    The introduced mechanisms can be benchmarked in isolation and do not affect existing performance behavior.
    2
    The introduced mechanisms cannot be fully benchmarked in isolation, but they only have a limited impact on the existing performance benchmarks.
    3
    The introduced mechanisms cannot be benchmarked in isolation and have a substantial impact on existing performance benchmarks or have complex interactions with existing mechanisms.
  • Edge/boundary conditions
    Feature contains edge/boundary conditions.
    Score anchors
    0
    No discernible edge cases or boundary conditions are introduced.
    1
    A single edge-case or boundary-condition prone mechanism is introduced.
    2
    Multiple edge-case or boundary-condition prone mechanisms are introduced, but none of them requires an elevated number of cases to test.
    3
    Multiple edge-case or boundary-condition prone mechanisms are introduced and at least one of them requires an elevated number of cases to test.
  • Cryptography
    Introduces new cryptography mechanisms or modifies existing functionality that involves cryptography
    Score anchors
    0
    No cryptography mechanisms are introduced.
    1
    A new cryptography mechanism is introduced but it is a well known mechanism that is known to have vast resources to aid on its testing.
    2
    Multiple new cryptography mechanisms are introduced that are well-known or a single but novel mechanism is introduced that is either untested or has limited resources.
    3
    Multiple new cryptography mechanisms are introduced and at least one of them is a novel mechanism.

Coordination

Cross-EIP interactions and behavior that clients must agree on before tests exist.

  • Cross-EIP interactions
    Introduces or modifies mechanisms that affect other EIPs in either the same or past forks.
    Score anchors
    0
    Fully self-contained EIP that does not depend on, modify, or conflict with any other EIP.
    1
    The EIP interacts with one or more other EIPs in a non-critical and limited way but can be tested independently for the most part.
    2
    The EIP depends on or modifies one or more other EIPs such that coordinated testing and consideration is required, but interactions are limited in scope and not complex.
    3
    The EIP has strong interdependencies with multiple EIPs, requiring extensive coordinated cross-EIP testing as well as potential re-design of existing test vectors.
    • +1 for every 3 additional interacting EIPs beyond the first 3, each of which requires its own coordinated test cases. List the EIPs in the rationale.
    • This row is intentionally uncapped, unlike every other anchor: each interacting EIP is another axis of the test matrix, so a ceiling would make a 12-EIP product indistinguishable from a 3-EIP one.
  • Unspecified behavior requiring cross-client consensus · Checklist revision 2 only
    The EIP text does not determine the answer for cases a test can construct. Clients must agree on a previously unspecified detail before tests can be baselined. The cost here is coordination and re-baselining, not test writing.
    Score anchors
    0
    The EIP text determines the answer for every case a test could construct.
    1
    A few details are unspecified but have an obvious intended reading.
    2
    Details require client agreement before tests can be written, but they are localized.
    3
    A previously unspecified *and previously unobservable* behavior becomes consensus-critical; expect tests to be re-baselined on each round of EIP amendment.
    • Score this from the EIP's state at assessment time: whether it has client implementations, whether it has been through a devnet, and how many open questions remain on its discussion thread.