Evaluated on: · Spec revision: 2026-10-07 · 6dac5e7491 · EIP-8081 list: CFI
Scope at the cutoff. EIP-7709 changes how BLOCKHASH (0x40) resolves in-window lookups. From the fork block onward, a lookup for one of the last 256 ancestors is treated as an SLOAD of slot `arg % 8191` at the EIP-2935 HISTORY_STORAGE_ADDRESS. The opcode then charges the cold or warm SLOAD cost on top of the BLOCKHASH base cost, warms the slot, and applies any state-access recording the active fork requires. Out-of-window and future arguments still return 0 with no extra effects, and the return-value semantics are declared unchanged. Clients may resolve the value by direct SLOAD, by a non-system `get` call (whose execution gas is not charged) or from memory. The EIP assumes EIP-2935 was active at least 256 blocks earlier, or at genesis.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 5 criteria affected
- Plausible range
- 13–20 (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
- Modified system contracts2
- Patterns affecting pre-existing tests2
- Edge/boundary conditions2
- 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 EIP says BLOCKHASH applies the full SLOAD effects but leaves several points open: whether the HISTORY_STORAGE_ADDRESS account (not just the slot) is warmed or recorded; the out-of-gas ordering between base and SLOAD charges and whether the access is recorded on failure; and which result is canonical when client-chosen resolution methods diverge because history storage is incomplete or the contract is absent.
Plausible total
13–20
recorded score 14 · plausible tiers Medium
Unresolved questions at the cutoff (4)
- Does in-window BLOCKHASH warm or record the HISTORY_STORAGE_ADDRESS account address, changing the cold-account cost of a later CALL/BALANCE to it?
- If the frame lacks gas for the SLOAD component, is the slot still recorded in the fork's state-access record?
- When history storage disagrees with actual chain hashes (late EIP-2935 activation or missing contract), must clients return the storage value per the pseudocode, or the true hash?
- How should arguments wider than uint64 be handled, given the pseudocode's uint64 typing?
Notable ambiguities noted by the assessor (3)
- The 'MAY serve from memory' option is only equivalent to the normative pseudocode if history storage is complete and consistent; test fixtures (especially state tests with explicit environment block hashes) must keep these aligned.
- Activation spacing: the text acknowledges a breaking change if fewer than 256 blocks pass between EIP-2935 and this EIP, but gives no rule for that case.
- The base BLOCKHASH cost is not restated; the EIP only says the SLOAD cost is added to it.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified system contractsUnder-specified | 2 | The contract's code and rules are unchanged. However, opcode semantics now depend on its storage (a new state assumption), and BLOCKHASH warming changes the gas outcomes of later direct calls (an interaction). This goes beyond one local convention, so this is level 2. |
Confidence: Medium Uncertainty: Whether the contract account itself is warmed is unspecified. |
| Patterns affecting pre-existing tests | 2 | Ordinary cases throughout the BLOCKHASH family need new gas expectations and new access-recording expectations. Localized cases in other families also need rework: EIP-2935 direct-call tests that combine with BLOCKHASH (warm slot) and state tests whose environment block hashes must match history storage. There is no common rewrite across distinct families, so this is level 2. |
Confidence: Medium Uncertainty: How many baseline fixtures use BLOCKHASH incidentally with tight gas or access-list expectations is not measurable without the supplied suite. |
| Edge/boundary conditions | 2 | Several boundary-sensitive mechanisms are involved: the window boundary that gates the new charge and access (combined with cold/warm), the activation-distance boundary relative to EIP-2935, and slot mapping across the 8191 ring-buffer wrap. Their dimensions can largely be tested independently, so there is no elevated matrix and this is level 2. |
Confidence: Medium Uncertainty: Handling of arguments larger than uint64 (the pseudocode types arg as uint64) is an additional implicit edge. |
| Cross-EIP interactions | 2 | Coordinated cases with EIP-2935 are needed. These cover BLOCKHASH followed by a direct `get` call (and the reverse) for warm/cold slot and account gas, reverted-frame warming, consistency between the system call's set and BLOCKHASH reads, and activation spacing. The active fork's state-access recording is also involved. This is level 2. |
Confidence: Medium Uncertainty: The access-recording and warm/cold EIPs are referenced only implicitly, not by number. Interacting EIPs: EIP-2935 |
| Unspecified behavior requiring cross-client consensus | 2 | Several localized details have competing plausible outcomes that clients must agree on before expected gas and access results can be fixed: account warming, out-of-gas ordering and recording, and inconsistent-storage resolution. This is level 2. |
Confidence: Medium Uncertainty: The active fork's SLOAD definition might resolve some of these by analogy, but that definition was not supplied. |
| EVM Gas rule changesUnder-specified | 1 | An existing opcode's gas rule changes from a constant cost to a cost that depends on access state. It reuses the existing cold/warm SLOAD accounting and adds no new accounting mechanism, so this is level 1. |
Confidence: Medium Uncertainty: Treating BLOCKHASH's move to access-dependent gas as a new charging site for an existing mechanism rather than a new mechanism is a judgement call. The warming of the account address is also unspecified. |
| State-access ordering within opcode executionUnder-specified | 1 | Exactly one existing opcode, BLOCKHASH, gains a storage access whose gas charge and access recording must be ordered (window check, then charge and access). No general rule for an opcode class changes, so this is level 1. |
Confidence: Medium Uncertainty: Two points are unstated: the order of base-gas and SLOAD-gas checks relative to recording on out-of-gas, and whether the history account itself is recorded or warmed. This could support level 2 if treated as a new state-accessing operation. |
| New test-framework primitives | 1 | Local extensions are needed: an access-dependent BLOCKHASH gas calculation in the fork gas model, and helpers to keep pre-state history storage aligned with environment block hashes. No new abstraction is required, so this is level 1. |
Confidence: Medium Uncertainty: This could be 0 if existing gas-calculation helpers already parameterize access state per opcode. |
| Security risksUnder-specified | 1 | The new condition is that the BLOCKHASH value and effects agree across resolution methods and match history storage. This can be checked locally, so this is level 1. |
Confidence: Medium Uncertainty: Misconfigured networks where history storage diverges could make this a cross-component consensus issue (level 2). |
Show 19 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | No new opcode. |
|
| Modified opcodesUnder-specified | 0 | The changes are gas and access effects only, which the rubric excludes from this criterion. |
Uncertainty: If storage diverges from chain history (activation fewer than 256 blocks after EIP-2935, or a missing contract), storage-based resolution would change return values. The text acknowledges this as a breaking case but declares semantics unchanged. |
| Added precompiles | 0 | None. |
|
| Modified precompiles | 0 | None. |
|
| Added system contracts | 0 | No new system contract. |
|
| Blob gas accounting changes | 0 | No blob-gas rule changes. |
|
| State gas accounting changes | 0 | Cold/warm access charges belong under GAS. There are no state-write accounting changes. |
|
| New EVM gas refund | 0 | No new refund. |
|
| New transaction types | 0 | None. |
|
| New or modified transaction validity mechanisms | 0 | None. |
|
| New block / header fields | 0 | None. |
|
| Encoding changes (RLP/SSZ) | 0 | None. |
|
| Block syncing changes | 0 | Only an execution rule changes. |
|
| New fork activation mechanism | 0 | The change is rule selection at the fork timestamp only, with no one-time state transition. |
|
| Engine API changes | 0 | None. |
|
| Transition-tool interface changes | 0 | No interface field or mechanism change is required. Values come from pre-state storage that the tool already receives. |
Uncertainty: Whether existing environment block-hash inputs must be reconciled with storage is a fixture-consistency issue, not an interface change. No tool evidence was supplied. |
| New invariant on pre-existing tests | 0 | No new output field or commitment is introduced. Additional access-recording entries are rework of existing expectations and are counted under PAT. |
|
| Performance risks | 0 | Gas rises to standard SLOAD pricing. This reduces the opcode's throughput and adds no workload under-priced relative to existing SLOAD assumptions, so no extra performance validation is established. |
Uncertainty: Clients that switch to trie-backed resolution may want a sanity benchmark, which could arguably justify level 1. |
| Cryptography | 0 | No cryptographic change. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@6dac5e7491EIPS/eip-7709.md committed 2026-10-07 · information cutoff 2026-10-07T22:23:55Z- Rubric
- Checklist revision 3 ·
ethspecs/pm@fe2f793b03 - Evaluator
- Opus 5.5 (
claude-opus-5-5) at high effort, one tool-less call per EIP · isolationbubblewrap_claude_p_no_tools_v1 - Source record
- Frozen research record
research/tasks/10-opus-v3-reassessment/prospective/outputs/assessments/hegota-2026-10-08/eip-7709.yaml· sha25623ad03380a32 - Supporting documents supplied with the EIP
supporting/eip-2935.md