Evaluated on: · Spec revision: 2023-04-13 · 5b909b76ac
Scope at the cutoff. At the assessment cutoff, EIP-4788 proposed appending the 32-byte parent beacon-block hash-tree root to every post-fork execution header. Before transactions, execution processing would write that root into a slot-keyed, modulo-8192 state ring buffer, and a new fixed-cost BEACON_ROOT opcode would expose reads from that storage. The document was still Draft and left its tests, reference implementation, security analysis, and several consensus-critical details unresolved.
- Evaluator
- LLMChecklist v2
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 14 criteria affected
- Plausible range
- 29–44 (High)
- Assessment cutoff
- 2023-04-27 · EIP revision
5b909b76ac(2023-04-13)
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
- New block / header fields3
- Encoding changes (RLP/SSZ)3
- New fork activation mechanism3
- Patterns affecting pre-existing tests3
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 makes a new consensus-layer value observable to execution while leaving timestamp-to-slot conversion, the exact gas constant and charge ordering, the cross-layer payload/interface path, history-account initialization, and ring-buffer freshness behavior unresolved. Its tests, reference implementation, and security considerations are also TODO.
Plausible total
29–44
recorded score 38 · plausible tiers High
Affected criteria (14)
- Added opcodes (1)
- Added system contracts (2)
- EVM Gas rule changes (2)
- State-access ordering within opcode execution (2)
- Block syncing changes (1)
- Engine API changes (1)
- Transition-tool interface changes (1)
- Patterns affecting pre-existing tests (3)
- New invariant on pre-existing tests (2)
- New test-framework primitives (1)
- Security risks (3)
- Performance risks (2)
- Edge/boundary conditions (3)
- Unspecified behavior requiring cross-client consensus (3)
Unresolved questions at the cutoff (6)
- How are execution timestamps converted to consensus slot numbers, including at the fork boundary?
- Is the opcode cost G_beacon_root or the undefined G_beacon_state_root, and when is it charged relative to stack and storage access?
- How is the parent beacon root delivered to and validated by the execution client and transition tooling?
- How is the fixed-address history account initialized or protected if state already exists there?
- Must a query for an overwritten modulo-8192 slot return the newer root, or zero as the absent-root prose suggests?
- What timestamp or slot-gap bounds limit the pre-block write loop?
Notable ambiguities noted by the assessor (3)
- The opcode gas identifier in prose does not match the constants table.
- The modulo ring buffer stores no slot tag, so the stated absent-root behavior is ambiguous after overwrite.
- The draft does not define convert_to_slot or the execution/consensus interface carrying the root.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| New block / header fields | 3 | The proposal directly introduces a new block-header field, which is the score-3 anchor. |
Confidence: High |
| Encoding changes (RLP/SSZ) | 3 | Appending a consensus field changes block-header encoding at the block level, which directly triggers the binary score-3 anchor. |
Confidence: High Uncertainty: The exact RLP construction is implicit rather than written out. |
| New fork activation mechanism | 3 | The fork-activation block modifies execution state under the new rule, directly meeting the score-3 anchor even though the action continues on later blocks. |
Confidence: High Uncertainty: FORK_TIMESTAMP is still TBD, but the activation condition itself is explicit. |
| Patterns affecting pre-existing testsUnder-specified | 3 | Existing post-fork block, state-transition, syncing, and fork-transition tests would need broad reworking to supply the new header value and account for the state write, reaching the diverse-test score-3 anchor. |
Confidence: Medium Uncertainty: The Test Cases section is TODO, so the exact historical fixture categories and amount of rework are not documented. |
| Security risksUnder-specified | 3 | Incorrect cross-layer roots, slot association, ring-buffer state, or opcode reads could undermine critical contract assumptions across several components, warranting extensive cross-layer review and fuzzing under the score-3 anchor. |
Confidence: Medium Uncertainty: The absence of security considerations and precise cross-layer validation responsibilities makes the exact threat surface uncertain. |
| Edge/boundary conditionsUnder-specified | 3 | Fork boundaries, zero or many elapsed slots, modulo wraparound, absent entries, key widths, and stale-slot queries create multiple interacting boundaries; slot-gap and wraparound coverage require an elevated case set. |
Confidence: High Uncertainty: Several boundary outcomes are not fully determined because convert_to_slot and overwrite freshness semantics are unspecified. |
| Unspecified behavior requiring cross-client consensusUnder-specified | 3 | Previously EVM-unobservable consensus-root and slot-association details become consensus-critical through a header field, state writes, and an opcode, while several constructible outcomes are unresolved; this matches score 3. |
Confidence: High Uncertainty: Material gaps include timestamp-to-slot conversion, gas naming and charge ordering, ring-buffer freshness, system-account initialization, and cross-layer validation/delivery. |
| Added system contractsUnder-specified | 2 | One new stateful system contract is introduced and receives a new protocol-level action every post-fork block, which matches score 2. |
Confidence: High Uncertainty: The account's code, initialization, and collision handling at the fixed address are not specified. |
| EVM Gas rule changesUnder-specified | 2 | A gas charge is introduced for a new operation without changing an existing opcode's accounting or refund behavior, matching the anchor for a new, isolated accounting mechanism. |
Confidence: Medium Uncertainty: The constants table names G_beacon_root, while the opcode text names the undefined G_beacon_state_root. |
| State-access ordering within opcode executionUnder-specified | 2 | The EIP introduces a new state-accessing operation whose stack, gas-charge, and storage-access ordering must be made consensus-exact, which is the score-2 anchor. |
Confidence: Medium Uncertainty: The pseudocode orders the pop and read but does not say where gas is charged or how exceptional execution is ordered relative to the read. |
| New invariant on pre-existing testsUnder-specified | 2 | A broad class of otherwise unrelated post-fork block tests gains a mechanical assertion about the new field, while the text does not require all pre-fork vectors to be re-derived; this matches score 2 rather than 3. |
Confidence: Medium Uncertainty: The proposal supplies no test cases showing whether state-root effects would also become a universal asserted invariant. |
| Performance risksUnder-specified | 2 | The write loop, state-trie interaction, and dependence on slot gaps require validation in full block processing and can affect existing block benchmarks, but the specified impact is bounded to this pre-block mechanism rather than clearly substantial across the system. |
Confidence: Medium Uncertainty: Undefined slot conversion and no stated timestamp-gap bound prevent a firm worst-case iteration and database-write assessment. |
| Added opcodesUnder-specified | 1 | This is a single opcode with no data portion, straightforward stack mechanics, and constant gas, meeting the score-1 simple-opcode anchor. |
Confidence: Medium Uncertainty: The gas constant name is inconsistent, and exceptional stack/gas ordering is not detailed. |
| Block syncing changesUnder-specified | 1 | Syncing clients gain a single, structurally simple fork-conditional header-field validation rule, matching score 1. |
Confidence: Medium Uncertainty: The proposal does not spell out the block RLP form or validation error conditions. |
| Engine API changesUnder-specified | 1 | The cross-layer value must be communicated with the execution payload, implying one new payload/header field and therefore the score-1 Engine API consequence. |
Confidence: Low Uncertainty: The EIP never names an Engine API endpoint, field, version, encoding, or validation responsibility. |
| Transition-tool interface changesUnder-specified | 1 | A transition tool must receive the single new header value to perform the mandatory pre-transaction write, matching the one-field score-1 anchor. |
Confidence: Medium Uncertainty: No transition-tool interface is specified, so whether auxiliary slot or fork-context inputs are also needed depends on resolving other gaps. |
| New test-framework primitivesUnder-specified | 1 | Existing fixture primitives require at least a minor extension to represent the appended field, but the package does not establish a new reusable expectation or modifier abstraction. |
Confidence: Low Uncertainty: The TODO test section leaves open whether special primitives for pre-block system writes or beacon-root expectations would be necessary. |
| Cryptography | 1 | The proposal integrates one well-specified, established Merkle-root mechanism rather than introducing novel cryptography, matching score 1. |
Confidence: High |
| Cross-EIP interactions | 1 | The proposal has a limited design-level interaction with EIP-2935's history-in-state pattern but uses its own address and opcode and remains independently testable, matching score 1. |
Confidence: High Uncertainty: The text calls EIP-2935 inspiration rather than a normative dependency. Interacting EIPs: EIP-2935 |
Show 9 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified opcodes | 0 | No pre-existing opcode behavior is changed or deprecated. |
|
| Added precompiles | 0 | The proposal adds no precompile. |
|
| Modified precompiles | 0 | No pre-existing precompile is modified. |
|
| Modified system contracts | 0 | No pre-existing system contract code, state, or behavior is modified. |
|
| Blob gas accounting changes | 0 | Nothing in the proposal meters, allocates, or otherwise changes blob gas. |
|
| State gas accounting changes | 0 | A state mutation is introduced, but no separate state-gas accounting mechanism covered by this anchor is added or modified. |
|
| New EVM gas refund | 0 | The proposal introduces no EVM gas-refund mechanism. |
|
| New transaction types | 0 | No new transaction type is introduced. |
|
| New or modified transaction validity mechanisms | 0 | Existing transaction types retain their validity and intrinsic gas rules. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@5b909b76acEIPS/eip-4788.md committed 2023-04-13 · information cutoff 2023-04-27- 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/cancun/eip-4788.yaml· sha256ed18b58392a9 - Supporting documents in the sealed package
supporting/eip-2935.md,supporting/ethereum-consensus-specs--ssz-simple-serialize.md