Retrospective LLM-Based Complexity Evaluations

EIP complexity assessment

EIP-8205: Withdrawal credentials preregistration

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

ProspectiveHegotáSnapshot 2026-10-07EIP-8081: PFILayers: execution, consensus
LLM Completescore 16
Human Available in open PRscore 5 · Checklist revision 1· ethspecs/pm #73

Evaluated on: · Spec revision: 2026-10-07 · 6dac5e7491 · EIP-8081 list: PFI

Scope at the cutoff. EIP-8205 adds a new EIP-7685 request contract on the execution layer for withdrawal-credential preregistrations. A request is pubkey ++ withdrawal_credentials ++ signature, 176 bytes. The contract copies the EIP-7002/7251 design: a queue, an exponential fee with TARGET=1 and MAX=4 dequeued per block, an EXCESS_INHIBITOR, a fee getter that reverts if value is attached, LOG0 emission, and an end-of-block system call that returns SSZ-serialized records. A system call with calldata disables the queue, but nothing under this EIP reaches that path. The consensus layer stores the preregistrations, checks their BLS signatures, enforces them against validator deposits and expires them. The EL side only queues and passes requests on; it performs no cryptographic checks. The bytecode, address, request type and deployment are all still TBD.

16MediumMedium
Evaluator
LLMChecklist v3
Confidence
Medium
Under-specified at assessment cutoff
Yes — 5 criteria affected
Plausible range
15–22 (Medium)
Snapshot
2026-10-07 · EIP revision 6dac5e7491 (2026-10-07)
Score bands · Checklist revision 3
  • 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. Encoding changes (RLP/SSZ)3
  2. Added system contracts2
  3. Edge/boundary conditions2
  4. Cross-EIP interactions2

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 contract address, EIP-7685 request type, runtime bytecode and deployment method are all TBD. Test cases and the reference implementation are also TBD. The pseudocode defines the intended behavior, but concrete gas usage, request ordering position and the activation/deployment method are unresolved.

Unresolved questions at the cutoff (4)
  • What are the predeploy address and the request-type byte?
  • What is the runtime bytecode, and therefore the gas consumed by submissions, fee-getter calls and system calls?
  • Is the contract deployed by an ordinary pre-fork transaction or installed at the fork?
  • What is the order of the system call relative to the other request contracts' system calls?
Notable ambiguities noted by the assessor (3)
  • The non-empty-calldata disable path cannot be reached under this EIP. Whether tests should still exercise it at the contract level (for example by calling directly as SYSTEM_ADDRESS) is unclear.
  • EIP-8282 describes its inhibitor as 'permanently' disabling the queue. EIP-8205 says the same mechanism can be re-enabled by a later system call with empty calldata.
  • Bytecode TBD prevents fixing expected gas values in fixtures.

Criterion breakdown

EIP-8205 Hegotá: LLM criterion scores and rationale
CriterionScoreWhy this scoreEvidence / uncertainty
Encoding changes (RLP/SSZ)3Adds a new request payload schema within the existing EIP-7685 request scheme.
  • eip.md · Preregistration request operation — "Each serialized request record is 176 bytes" New execution-request payload schema: pubkey(48) ++ withdrawal_credentials(32) ++ signature(96), SSZ-serialized.
Confidence: High
Added system contracts2Exactly one new contract, which is stateful and triggers a system action (an execution request).
  • eip.md · Preregistration Request Contract One new stateful contract with a queue, excess and count storage. Its system call produces EIP-7685 requests.
Confidence: High
Edge/boundary conditionsUnder-specified2Several independent boundary-sensitive mechanisms are introduced: input length, fee threshold, dequeue cap, excess/target update, inhibitor state and fee-getter value. Each can mostly be tested on its own.
  • eip.md · Preregistration Request Contract — "requires a 176 byte input" / "any other input length MUST cause the call to revert" Dispatch on exact input length.
  • eip.md · Add Preregistration Request — "require(msg.value >= fee" Fee threshold boundary.
  • eip.md · dequeue_preregistration_requests — "min(num_in_queue, MAX_PREREGISTRATION_REQUESTS_PER_BLOCK)" Per-block dequeue cap of 4 and resetting the head/tail pointers.
  • eip.md · update_excess_preregistration_requests Excess and target arithmetic, inhibitor reset, and disabling on non-empty calldata.
  • eip.md · Fee Getter — "a value-bearing fee getter call MUST revert" The fee getter has a value boundary.
Confidence: Medium
Uncertainty: The dispatch on caller × calldata length × value × inhibitor state could be treated as an elevated matrix, which would be level 3.
Cross-EIP interactions2Coordinated cases are needed for blocks that carry preregistration requests alongside other request types: deposits, withdrawals, consolidations and builder requests. Those cases check requests_hash ordering and content. Other interactions only need local compatibility checks.
  • supporting/eip-7685.md · Ordering — "ordered by request_type ascending" The new type must be ordered and hashed together with the other request types.
  • eip.md · Race between preregistration and deposit — "If both arrive in the same execution payload" Deposit (EIP-6110) and preregistration requests can share a payload.
  • supporting/eip-8282.md · Constants — "Final request-type values MUST be unique" Request-type allocation must coordinate with types 0x03 and 0x04.
Confidence: Medium
Uncertainty: The final type byte is TBD, so its exact position in the ordering is unknown.
Interacting EIPs: EIP-7685, EIP-6110, EIP-7002, EIP-7251, EIP-8282, EIP-1559
Transition-tool interface changesUnder-specified1The meaning of the existing requests output field is extended to include a new type. No new mechanism is needed, since the system-call and request plumbing already exist from 7002/7251.
  • eip.md · Preregistration request operation — "request_type = PREREGISTRATION_REQUEST_TYPE" The transition tool's requests output must carry a new request type.
Confidence: Low
Uncertainty: If an output for a new request type does not count as a semantic field change, this would be 0. No transition-tool documentation was supplied.
Patterns affecting pre-existing tests1Empty request data is excluded from the commitment, so ordinary baseline tests keep their expected outputs. Rework is limited to request-bus cases, such as tests that enumerate request types and their ordering or that test missing system-contract code. That is localized rework.
  • eip.md · System Call — "At the end of processing any execution block starting from the FORK_BLOCK" A new end-of-block system call is added to every block alongside the existing request system calls.
  • supporting/eip-7685.md · Block Header — "Items with empty request_data are excluded" Blocks with no preregistration requests keep the same requests_hash, which limits rework.
Confidence: Medium
Uncertainty: Post-state roots change because the new contract's storage is written (the excess moves from the inhibitor to 0). Fixture filling normally absorbs this, but some tests that assert explicit post-state could be affected.
New invariant on pre-existing tests1New outputs (the request entry and contract storage) only matter to assertions in the request-related subset of tests. Ordinary baseline tests produce no preregistration requests.
  • eip.md · System Call — "Each preregistration request must appear in the EIP-7685 requests list" A new request type enters the requests list and requests_hash, but only when requests are dequeued.
  • eip.md · update_excess_preregistration_requests A protocol-mandated storage write (resetting the inhibitor, updating excess and count) happens in each block.
Confidence: Medium
Uncertainty: An argument could be made that every test should check the system-contract storage writes, which would be level 2.
New test-framework primitives1The framework needs a new request-type helper and a predeploy entry, which are local extensions of existing request primitives. The EL does not verify BLS, so test data can be arbitrary bytes.
  • eip.md · Preregistration request operation Adds a new 176-byte request object (pubkey, withdrawal_credentials, signature).
  • supporting/eip-7002.md · Withdrawal request operation The same kind of request primitive already exists for prerequisite request types.
Confidence: Medium
Security risksUnder-specified1The EL-side security conditions (system-call robustness, fee gating, inhibitor, faithful request ordering) can be checked locally and follow the 7002 pattern. The enforcement security model lives on the CL.
  • eip.md · System call failure — "the block MUST be deemed invalid" The contract must never fail during the system call under adversarial queue states.
  • eip.md · DoS and state growth The fee is the rate limiter against spam.
  • eip.md · BLS verification on CL only The EL does no authorization; the CL does all semantic validation.
Confidence: Medium
Uncertainty: The cross-layer dependence of deposit-protection guarantees on accurate EL request transport could justify level 2.
Performance risks1One more bounded per-block system call and contract workload, which component benchmarks can cover. CL-side BLS cost is out of EL scope.
  • eip.md · System Call — "The call has a dedicated gas limit of 30_000_000" Adds a bounded per-block system call that dequeues up to 4 records of 6 slots each.
  • eip.md · Fee calculation The fake_exponential loop on submission and in the getter is bounded.
Confidence: Medium
Uncertainty: Bytecode is TBD, so actual gas and timing cannot be measured yet.
Unspecified behavior requiring cross-client consensusUnder-specified1Placeholders (address, type byte, bytecode, deployment) leave concrete expected values open. The pseudocode still fixes one intended behavior, with no competing normative interpretations.
  • eip.md · Configuration — PREREGISTRATION_REQUEST_PREDEPLOY_ADDRESS / PREREGISTRATION_REQUEST_TYPE "TBD" The address and request type are unspecified.
  • eip.md · Bytecode — "TBD" Runtime bytecode, and therefore the gas consumed by calls, is unspecified.
Confidence: Medium
Uncertainty: Because bytecode is TBD, the gas consumed by calls is consensus-visible but undetermined, which could argue for level 2.
Show 17 zero-score criteria
Zero-score criteria (Checklist revision 3)
CriterionScoreWhy this scoreEvidence / uncertainty
Added opcodes0No new opcodes.
  • eip.md · Specification No new instruction. SLOTNUM comes from EIP-7843 and is only cited for application use.
Modified opcodes0No opcode changes.
  • eip.md · Specification No instruction semantics change.
Added precompiles0No new precompiles.
  • eip.md · Specification No precompile is introduced.
Modified precompiles0No precompile changes.
  • eip.md · Specification No precompile changes.
Modified system contracts0No existing system contract's rules, code or storage change on the EL.
  • eip.md · Modified deposit request ingestion Deposit enforcement changes only on the CL. The EL deposit contract and its log parsing are unchanged.
  • eip.md · Disabling the queue The inhibitor and disable mechanism belongs to the new contract, not to existing ones.
Uncertainty: The new end-of-block call joins the existing sequence of request system calls, and its relative order is unspecified, but it does not appear to change outcomes.
EVM Gas rule changes0No execution-gas charging, metering or settlement rule changes. The system-call gas exemption is inherited and the fee is a contract-level charge.
  • eip.md · System Call — "Gas consumed by this call does not count against the block's overall gas usage" Reuses the system-call gas treatment already defined by EIP-7002/7251; no new gas accounting rule.
  • eip.md · Fee calculation The request fee is an ordinary value charged by the contract, not an EVM gas accounting rule.
State-access ordering within opcode execution0No opcode ordering changes and no new ordering rule.
  • eip.md · Preregistration Request Contract Only new contract code is added; no instruction's access or charge ordering changes.
Blob gas accounting changes0No blob-gas changes.
  • eip.md · Specification Blobs are not mentioned.
State gas accounting changes0Uses unchanged state-writing operations and adds no state-gas mechanism.
  • eip.md · Add Preregistration Request The contract stores data with ordinary SSTOREs; no state-gas accounting is defined.
New EVM gas refund0No new refund mechanism.
  • eip.md · Fee overpayment — "The system contract does not refund excess fee payment" No refund mechanism of any kind.
New transaction types0No new transaction type.
  • eip.md · Preregistration request operation This is an execution-request type, not a transaction envelope.
New or modified transaction validity mechanisms0No consensus rule on transaction validity or intrinsic gas changes.
  • eip.md · Add Preregistration Request Insufficient fees or a bad input length cause application-level reverts, not transaction invalidity.
New block / header fields0No new header or block field.
  • supporting/eip-7685.md · Block Header The requests_hash already exists. A new request type under it is not a new header field.
Block syncing changes0No RLP decoding or structural header/block rule changes. The new invalidity conditions are execution-derived. The rubric says ordinary execution-rule changes alone do not count.
  • eip.md · System Call — "If there is no code at PREREGISTRATION_REQUEST_PREDEPLOY_ADDRESS, the corresponding block MUST be marked invalid" Block invalidity follows from execution and state, using the same pattern as EIP-7002.
Uncertainty: If the no-code and system-call-failure rules were treated as block validation, this could be 1.
New fork activation mechanismUnder-specified0Deployment is ordinary and the first-call inhibitor reset is part of recurring processing. No activation-specific EL state transition is specified.
  • eip.md · Deployment — "TBD — the deterministic deployment transaction will be provided" Deployment is through an ordinary deterministic transaction, like EIP-7002.
  • eip.md · update_excess_preregistration_requests — "Reset excess to 0 on the first system call after activation" Clearing the inhibitor happens inside the recurring system call, not as a one-time migration.
Uncertainty: Deployment is TBD. If the final design installs code at the fork (as a mandated predeploy), this becomes 3.
Engine API changes0No Engine API field or endpoint change is specified. The new type travels through the existing requests field.
  • supporting/eip-7685.md · Requests — "opaque byte array" Requests are carried as opaque typed bytes. Adding a type does not change any Engine API field or method.
  • eip.md · Backwards Compatibility Lists EL changes as a system contract and a request type only.
Uncertainty: No Engine API specification was supplied.
Cryptography0BLS verification happens only on the CL. The EL reuses an unchanged hash commitment.
  • eip.md · BLS verification on CL only — "BLS verification happens on the CL, not in the EL system contract" The EL performs no new cryptographic verification.
  • supporting/eip-7685.md · Block Header The requests_hash still uses unchanged sha256.
Assessment provenance
Assessed EIP revision
ethereum/EIPs@6dac5e7491 EIPS/eip-8205.md committed 2026-10-07 · information cutoff 2026-10-07T22:23:55Z
Current master · File history · blob 6c78772098 · sha256 c6259cbcdd48
Rubric
Checklist revision 3 · ethspecs/pm@fe2f793b03
Evaluator
Opus 5.5 (claude-opus-5-5) at high effort, one tool-less call per EIP · isolation bubblewrap_claude_p_no_tools_v1
Source record
Frozen research record research/tasks/10-opus-v3-reassessment/prospective/outputs/assessments/hegota-2026-10-08/eip-8205.yaml · sha256 af94351f003d
Supporting documents supplied with the EIP
supporting/eip-1559.md, supporting/eip-4788.md, supporting/eip-6110.md, supporting/eip-7002.md, supporting/eip-7251.md, supporting/eip-7685.md, supporting/eip-7732.md, supporting/eip-7843.md, supporting/eip-8282.md

Evaluated on: Not recorded

5LowLow
Evaluator
HumanChecklist v1
Confidence
Not recorded
Under-specified at assessment cutoff
Not recorded in the checklist
Checklist published
2026-05-29
Score bands · Checklist revision 1
  • Low <10
  • Medium 10–19
  • High ≥20

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

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. New fork activation mechanism3
  2. Added system contracts2

Criterion breakdown

EIP-8205 Hegotá: Human criterion scores and rationale
CriterionScoreWhy this scoreNotes
New fork activation mechanism3No rationale recorded.—
Added system contracts2No rationale recorded.—
Show 22 zero-score criteria
Zero-score criteria (Checklist revision 1)
CriterionScoreWhy this scoreNotes
Added opcodes0No rationale recorded.—
Modified opcodes0No rationale recorded.—
Added precompiles0No rationale recorded.—
Modified precompiles0No rationale recorded.—
Modified system contracts0No rationale recorded.—
EVM Gas rule changes0No rationale recorded.—
Blob gas accounting changes0No rationale recorded.—
New EVM gas refund0No rationale recorded.—
New transaction types0No rationale recorded.—
New or modified transaction validity mechanisms0No rationale recorded.—
New block / header fields0No rationale recorded.—
Encoding changes (RLP/SSZ)0No rationale recorded.—
Block syncing changes0No rationale recorded.—
Engine API changes0No rationale recorded.—
Engine API encoding changes0No rationale recorded.—
Transition-tool interface changes0No rationale recorded.—
Patterns affecting pre-existing tests0No rationale recorded.—
Security risks0No rationale recorded.—
Performance risks0No rationale recorded.—
Edge/boundary conditions0No rationale recorded.—
Cryptography0No rationale recorded.—
Cross-EIP interactions0No rationale recorded.—
Assessment provenance
Rubric
Checklist revision 1 · ethspecs/pm@d936bcb349
Evaluator
STEEL team · ethspecs/pm complexity_assessments
Source record
Open pull request #73: Add complexity assessments · checklist at 7bdc9e9829 · updated 2026-05-29
blob 0000ef39c9 · sha256 fcab9b8af1fa
Research record
research/tasks/09-hegota-human-assessment-snapshot/outputs/assessments/eip-8205.yaml · sha256 5c71d0165323

The LLM applied checklist revision 3 and the human reviewers revision 1 to EIP-8205 in Hegotá. Revision 3 phrases the same criteria more precisely; differences cover the 23 criteria both revisions share, and each total keeps its own revision. Δ is LLM minus Human.

Using the latest scored LLM evaluation for this checklist: 2026-10-08 · spec 2026-10-07 · 6dac5e7491. The Human and LLM assessments may use different spec revisions.

LLM16Medium
Human5Low
Δ total+11Tiers differ: Medium vs Low
Criteria15/23agree exactly · 4 differ by 1 · 4 differ by 2+

Complexity profiles side by side

LLM
Human

Largest disagreements: Encoding changes (RLP/SSZ) (+3), New fork activation mechanism (−3), Edge/boundary conditions (+2), Cross-EIP interactions (+2), Patterns affecting pre-existing tests (+1)

Per-criterion scores, Human versus LLM, ordered by the size of the difference
CriterionLLMHumanΔAgreementRationale from each source
Encoding changes (RLP/SSZ)30+3Differ by 2+
Show rationale

LLM Adds a new request payload schema within the existing EIP-7685 request scheme.

Human No rationale recorded.

New fork activation mechanism03−3Differ by 2+
Show rationale

LLM Deployment is ordinary and the first-call inhibitor reset is part of recurring processing. No activation-specific EL state transition is specified.

Human No rationale recorded.

Edge/boundary conditions20+2Differ by 2+
Show rationale

LLM Several independent boundary-sensitive mechanisms are introduced: input length, fee threshold, dequeue cap, excess/target update, inhibitor state and fee-getter value. Each can mostly be tested on its own.

Human No rationale recorded.

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

LLM Coordinated cases are needed for blocks that carry preregistration requests alongside other request types: deposits, withdrawals, consolidations and builder requests. Those cases check requests_hash ordering and content. Other interactions only need local compatibility checks.

Human No rationale recorded.

Transition-tool interface changes10+1Differ by 1
Show rationale

LLM The meaning of the existing requests output field is extended to include a new type. No new mechanism is needed, since the system-call and request plumbing already exist from 7002/7251.

Human No rationale recorded.

Patterns affecting pre-existing tests10+1Differ by 1
Show rationale

LLM Empty request data is excluded from the commitment, so ordinary baseline tests keep their expected outputs. Rework is limited to request-bus cases, such as tests that enumerate request types and their ordering or that test missing system-contract code. That is localized rework.

Human No rationale recorded.

Security risks10+1Differ by 1
Show rationale

LLM The EL-side security conditions (system-call robustness, fee gating, inhibitor, faithful request ordering) can be checked locally and follow the 7002 pattern. The enforcement security model lives on the CL.

Human No rationale recorded.

Performance risks10+1Differ by 1
Show rationale

LLM One more bounded per-block system call and contract workload, which component benchmarks can cover. CL-side BLS cost is out of EL scope.

Human No rationale recorded.

Added opcodes000Agree
Show rationale

LLM No new opcodes.

Human No rationale recorded.

Modified opcodes000Agree
Show rationale

LLM No opcode changes.

Human No rationale recorded.

Added precompiles000Agree
Show rationale

LLM No new precompiles.

Human No rationale recorded.

Modified precompiles000Agree
Show rationale

LLM No precompile changes.

Human No rationale recorded.

Added system contracts220Agree
Show rationale

LLM Exactly one new contract, which is stateful and triggers a system action (an execution request).

Human No rationale recorded.

Modified system contracts000Agree
Show rationale

LLM No existing system contract's rules, code or storage change on the EL.

Human No rationale recorded.

EVM Gas rule changes000Agree
Show rationale

LLM No execution-gas charging, metering or settlement rule changes. The system-call gas exemption is inherited and the fee is a contract-level charge.

Human No rationale recorded.

Blob gas accounting changes000Agree
Show rationale

LLM No blob-gas changes.

Human No rationale recorded.

New EVM gas refund000Agree
Show rationale

LLM No new refund mechanism.

Human No rationale recorded.

New transaction types000Agree
Show rationale

LLM No new transaction type.

Human No rationale recorded.

New or modified transaction validity mechanisms000Agree
Show rationale

LLM No consensus rule on transaction validity or intrinsic gas changes.

Human No rationale recorded.

New block / header fields000Agree
Show rationale

LLM No new header or block field.

Human No rationale recorded.

Block syncing changes000Agree
Show rationale

LLM No RLP decoding or structural header/block rule changes. The new invalidity conditions are execution-derived. The rubric says ordinary execution-rule changes alone do not count.

Human No rationale recorded.

Engine API changes000Agree
Show rationale

LLM No Engine API field or endpoint change is specified. The new type travels through the existing requests field.

Human No rationale recorded.

Cryptography000Agree
Show rationale

LLM BLS verification happens only on the CL. The EL reuses an unchanged hash commitment.

Human No rationale recorded.

State-access ordering within opcode execution0n/a—Only in revision 3
Show rationale

LLM No opcode ordering changes and no new ordering rule.

Human No rationale recorded.

State gas accounting changes0n/a—Only in revision 3
Show rationale

LLM Uses unchanged state-writing operations and adds no state-gas mechanism.

Human No rationale recorded.

Engine API encoding changesn/a0—Only in revision 1—
New invariant on pre-existing tests1n/a—Only in revision 3
Show rationale

LLM New outputs (the request entry and contract storage) only matter to assertions in the request-related subset of tests. Ordinary baseline tests produce no preregistration requests.

Human No rationale recorded.

New test-framework primitives1n/a—Only in revision 3
Show rationale

LLM The framework needs a new request-type helper and a predeploy entry, which are local extensions of existing request primitives. The EL does not verify BLS, so test data can be arbitrary bytes.

Human No rationale recorded.

Unspecified behavior requiring cross-client consensus1n/a—Only in revision 3
Show rationale

LLM Placeholders (address, type byte, bytecode, deployment) leave concrete expected values open. The pseudocode still fixes one intended behavior, with no competing normative interpretations.

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 · not in checklist revision 1
    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 · not in checklist revision 1
    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 · not in checklist revision 1
    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 · not in checklist revision 1
    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 · not in checklist revision 1
    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.