Evaluated on: · Spec revision: 2022-05-06 · 9e393a79d9
Scope at the cutoff. The proposal writes each preceding block hash into storage at a reserved address before transaction processing in every block after the configured fork boundary. After a further 256-block delay, it changes BLOCKHASH to return stored hashes for prior fork-era blocks while retaining zero outside the specified range. The proposal explicitly leaves its fork number, tests, and implementation unfinished at the assessment-time revision.
- Evaluator
- LLMChecklist v2
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 8 criteria affected
- Plausible range
- 20–28 (Medium–High)
- Assessment cutoff
- 2024-04-11 · EIP revision
9e393a79d9(2022-05-06)
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
- Modified opcodes3
- New fork activation mechanism3
- New invariant on pre-existing tests3
- Edge/boundary conditions3
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 state-backed BLOCKHASH lookup does not define whether its internal read has ordinary SLOAD gas, warming, or access-ordering effects, and the protocol-level write does not define initialization or collision semantics for the reserved address. Tests and implementation are TBD, leaving the handling of these observable cases to cross-client agreement.
Plausible total
20–28
recorded score 24 · plausible tiers Medium, High
Affected criteria (8)
- EVM Gas rule changes (0)
- State-access ordering within opcode execution (1)
- Transition-tool interface changes (0)
- Patterns affecting pre-existing tests (1)
- New invariant on pre-existing tests (3)
- New test-framework primitives (0)
- Security risks (2)
- Unspecified behavior requiring cross-client consensus (3)
Unresolved questions at the cutoff (4)
- Does BLOCKHASH's state-backed lookup incur storage-access gas or change address/slot warmness, and when is that access recorded relative to its gas charge?
- What account creation, initialization, and collision rules apply to HISTORY_STORAGE_ADDRESS?
- Is the block-level sstore an unmetered protocol action, and how must transition tooling represent or assert it?
- Does FORK_BLKNUM denote the last inactive block or the nominal activation block, given the strict greater-than condition?
Notable ambiguities noted by the assessor (3)
- The EIP alternates between describing storage in a contract and using protocol-level sstore(address, key, value) notation without defining contract code or account setup.
- The historical title says Save historical block hashes in state, while the sealed assignment metadata says Serve historical block hashes from state; the populated assignment provenance is preserved.
- The opcode switch is delayed until block.number is greater than FORK_BLKNUM plus 256, whereas history storage starts after FORK_BLKNUM.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified opcodes | 3 | At least one existing opcode has a non-gas behavioral change, which is the rubric's binary score-3 condition. |
Confidence: High |
| New fork activation mechanism | 3 | The feature's activation directly initiates a protocol-level state modification at the first active block, satisfying the score-3 anchor; this is not merely initialization of an internal variable. |
Confidence: High Uncertainty: The numeric fork parameter is TBD, and the strict-greater-than wording makes the named boundary one block earlier than the first write. |
| New invariant on pre-existing testsUnder-specified | 3 | Every post-activation block produces an additional state update irrespective of its transactions, so carried-forward block/state tests must account for the history slot and resulting state in addition to their original subject; this is the universal fork-test invariant described by score 3. |
Confidence: Medium Uncertainty: The EIP does not provide tests or specify which fixture formats directly assert the resulting state. |
| Edge/boundary conditions | 3 | Multiple off-by-one-prone boundaries interact: before/at/after activation, before/at/after the 256-block delay, and arguments below, at, within, or beyond the allowed interval. Their cross-product requires an elevated case set, matching score 3. |
Confidence: High Uncertainty: The exact FORK_BLKNUM value is TBD, but the relative boundaries are explicit. |
| Unspecified behavior requiring cross-client consensusUnder-specified | 3 | A formerly history-only opcode now performs a state-backed lookup whose gas/access side effects can be observed by constructed executions, yet those effects are not determined. This makes newly observable behavior consensus-critical and requires cross-client baselining, matching score 3. |
Confidence: High Uncertainty: It is unclear whether sload denotes an ordinary EVM-style access with warming and gas consequences or only an implementation-level raw state lookup; the system-address account semantics are also unstated. |
| Added system contracts | 2 | This is one new stateful system contract/address, which directly matches the score-2 anchor for a single stateful system contract. |
Confidence: High Uncertainty: The text specifies storage at the address but does not define deployed code or account initialization details. |
| Security risksUnder-specified | 2 | The mechanism touches a limited but consensus-critical set of components: block processing, state, and an opcode whose values may be consumed by contracts and light-client schemes. Targeted review and adversarial testing are warranted, matching score 2 rather than an extensive multi-component redesign. |
Confidence: Medium Uncertainty: The Security Considerations section discusses state growth but does not analyze incorrect or mutable history entries, reserved-address behavior, or opcode-read side effects. |
| Performance risks | 2 | Cumulative state growth and a mandatory write on every block cannot be assessed wholly as an isolated opcode microbenchmark, but the proposal characterizes the impact as limited relative to existing state; this fits score 2. |
Confidence: High Uncertainty: No benchmarks or quantitative processing-cost analysis are supplied. |
| State-access ordering within opcode executionUnder-specified | 1 | A single existing opcode acquires a state access, so its execution path and the position of that access relative to gas charging must be settled; this matches the single-opcode score-1 anchor. |
Confidence: Medium Uncertainty: The EIP specifies the returned value but not whether the read has ordinary SLOAD access-ordering or access-list side effects. |
| Patterns affecting pre-existing testsUnder-specified | 1 | Existing tests that assume old BLOCKHASH results beyond 256 blocks form a narrow subset requiring changed expectations; most opcode behavior remains unchanged, fitting the minor-subset anchor. |
Confidence: Medium Uncertainty: The Test Cases section is TBD, so the exact inventory of affected existing vectors is not described. |
| Cross-EIP interactions | 1 | The relationship to two identified predecessor designs and an unidentified future history-accumulator transition is limited and non-critical to independent testing of this EIP, matching score 1 rather than a coordinated dependency score. |
Confidence: High Uncertainty: The future merge/history-accumulator interaction is described without an EIP number, so no number is inferred. Interacting EIPs: EIP-98, EIP-210 |
Show 17 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | No opcode is added, matching the zero anchor. |
|
| Added precompiles | 0 | No precompile is introduced, matching the zero anchor. |
|
| Modified precompiles | 0 | No pre-existing precompile is modified, matching the zero anchor. |
|
| Modified system contracts | 0 | The proposal adds its own stateful system address rather than modifying a pre-existing system contract, so the zero anchor applies. |
|
| EVM Gas rule changesUnder-specified | 0 | No EVM gas accounting change is specified, so the score follows the zero anchor; uncertainty about how the newly mentioned storage read participates in gas accounting is recorded separately as under-specification. |
Uncertainty: The text does not state whether the internal storage read changes BLOCKHASH gas charging. |
| Blob gas accounting changes | 0 | No blob gas accounting rule is introduced or modified, matching the zero anchor. |
|
| State gas accounting changes | 0 | A state write alone does not trigger this anchor's separate state-gas-accounting category; no such accounting mechanism is specified. |
|
| New EVM gas refund | 0 | No new EVM gas-refund mechanism is introduced, matching the zero anchor. |
|
| New transaction types | 0 | No new transaction type is introduced, matching the zero anchor. |
|
| New or modified transaction validity mechanisms | 0 | No existing transaction validity rule or intrinsic gas calculation is modified, matching the zero anchor. |
|
| New block / header fields | 0 | No new block/header field is introduced, matching the zero anchor. |
|
| Encoding changes (RLP/SSZ) | 0 | No RLP, SSZ, or other transaction/block/interface encoding change is introduced, matching the zero anchor. |
|
| Block syncing changes | 0 | No block-RLP validation mechanism requiring sync testing is introduced, matching the zero anchor. |
|
| Engine API changes | 0 | The EIP introduces no Engine API change, matching the zero anchor. |
|
| Transition-tool interface changesUnder-specified | 0 | No transition-tool interface field or communication mechanism is specified, matching the zero anchor, even though the transition implementation must perform a new action. |
Uncertainty: The EIP does not discuss transition-tool inputs or whether fork-activation awareness would require an interface extension. |
| New test-framework primitivesUnder-specified | 0 | The text establishes no need for a new expectation, modifier, or reusable framework primitive; existing block, state, and opcode assertions appear sufficient, so the zero anchor is best supported. |
Uncertainty: With test cases absent, a minor helper for the pre-transaction system write could later prove useful. |
| Cryptography | 0 | Using already-produced block hashes as values does not introduce or modify cryptographic functionality, so the zero anchor applies. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@9e393a79d9EIPS/eip-2935.md committed 2022-05-06 · information cutoff 2024-04-11- 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/05-retrospective-complexity-assignment/outputs/fork-eips/prague/eip-2935.yaml· sha256a18299f49995