Evaluated on: · Spec revision: 2025-05-06 · 040800a325
Scope at the cutoff. EIP-7934 (revision 040800a, Draft) adds a consensus rule that an execution block is invalid if its RLP encoding is larger than MAX_RLP_BLOCK_SIZE. That limit is defined as MAX_BLOCK_SIZE (10 MiB = 10,485,760 bytes) minus a 512 KiB margin (524,288 bytes), giving 9,961,472 bytes. Block producers must not build blocks over the limit, and nodes must reject such blocks during validation and propagation. The check does not depend on gas metrics. The EIP adds no header fields, transaction types, opcodes, gas rules or Engine API changes.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 5 criteria affected
- Plausible range
- 6–10 (Low)
- Assessment cutoff
- 2025-05-09 · EIP revision
040800a325(2025-05-06)
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
- Unspecified behavior requiring cross-client consensus2
- Block syncing changes1
- New test-framework primitives1
- Security risks1
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 exact limit is internally inconsistent. The abstract says the cap is 10 MiB; the bullets define MAX_RLP_BLOCK_SIZE = 10 MiB − 512 KiB; the pseudocode uses an undefined GOSSIP_UPPER_LIMIT and a differently named SAFETY_MARGIN. The EIP also does not define which 'block' encoding is measured beyond rlp.encode(block), how the rule maps to payloads received through the Engine API, or the expected builder behavior when the next transaction would exceed the cap.
Plausible total
6–10
recorded score 7 · plausible tiers Low
Unresolved questions at the cutoff (5)
- Is the enforced limit 10,485,760 bytes (as the abstract implies) or 9,961,472 bytes (MAX_BLOCK_SIZE − MARGIN)? What is GOSSIP_UPPER_LIMIT?
- Exactly which structure is RLP-encoded for the check: the full EL block (header, transactions, ommers, withdrawals) or another representation?
- How does the check apply to payloads received through engine_newPayload? Is a specific status or error expected?
- Does the rule apply from the first block at or after the fork activation timestamp?
- Is there any normative builder rule for transaction selection near the cap, beyond 'must ensure ... does not exceed'?
Notable ambiguities noted by the assessor (5)
- The abstract says the cap is 10 MiB, but the specification computes 10,485,760 − 524,288 = 9,961,472 bytes.
- The pseudocode references GOSSIP_UPPER_LIMIT, which is never defined, and SAFETY_MARGIN, while the bullets use MARGIN.
- Which object is encoded ('block') is not specified precisely: the full EL block [header, transactions, ommers, withdrawals] versus some other representation such as an Engine API payload.
- Builder behavior is only stated as 'must ensure ... does not exceed'. There is no rule for transaction selection near the cap and no Engine API error semantics.
- Fork activation timing is not stated explicitly. Presumably the check applies to blocks from the fork onward.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Unspecified behavior requiring cross-client consensusUnder-specified | 2 | The text contradicts itself on the exact limit. The abstract says 10 MiB; the bullets give 10 MiB minus 512 KiB = 9,961,472 bytes; the code uses an undefined GOSSIP_UPPER_LIMIT. The validity outcome for blocks between 9,961,473 and 10,485,760 bytes therefore needs spec or client agreement before fixtures can be fixed. These are localized competing outcomes (level 2). |
Confidence: Medium Uncertainty: Most readers would probably resolve GOSSIP_UPPER_LIMIT as MAX_BLOCK_SIZE, giving 9,961,472 bytes. If that reading is treated as unambiguous, this would be level 1. |
| Block syncing changesUnder-specified | 1 | One new structural validation rule is added. It is computed from the block's own encoding and does not depend on other blocks or state, so I treat it as simple (level 1). |
Confidence: Medium Uncertainty: The check depends on the encoding of every block component, not a single field. A strict reading of "simple validates one field locally" could push it to complex (level 2). |
| New test-framework primitives | 1 | Tests need a local extension: a helper that pads block contents (transaction calldata, transaction count, withdrawals) to hit an exact encoded block size, plus a new block-exception value. This extends existing block-construction primitives. It does not need a new shared abstraction. |
Confidence: Medium Uncertainty: Hitting the size boundary may require unusually high gas limits in genesis or block environments. RLP length-prefix discontinuities make exact sizing fiddly, but this is still local. |
| Security risks | 1 | The new rejection condition can be checked locally: clients must reject at the boundary consistently, or there is a consensus-split risk. The CL gossip alignment is the motivation, not a changed EL security assumption that needs integration fuzzing. |
Confidence: Medium Uncertainty: Whether the EL limit stays consistent with the CL gossip limit and beacon block overhead could be treated as a bounded cross-layer interaction (level 2). |
| Edge/boundary conditionsUnder-specified | 1 | There is exactly one boundary-sensitive mechanism, the encoded block size limit. Size can come from different block parts (header, transactions, ommers list, withdrawals), but they all feed the same single limit. |
Confidence: High Uncertainty: There is a question of which value is the boundary: 10 MiB (abstract) or 10 MiB minus 512 KiB (specification). It is recorded under UNSP and does not change the count. |
| Cross-EIP interactions | 1 | Interactions are local compatibility checks only. Boundary cases should make sure every body component (transactions of every type, withdrawals, header) counts toward the size, and that high-gas-limit blocks hit the cap. No coordinated multi-EIP scenario restructuring is required. The candidate list is empty, so no numbered EIPs are recorded. |
Confidence: Medium Uncertainty: The EIP numbers for withdrawals, typed transactions and calldata floor pricing are not in the candidate list or the supplied text. The interactions are described generically. |
Show 22 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | No new opcode. |
|
| Modified opcodes | 0 | No opcode semantics change. |
|
| Added precompiles | 0 | No new precompile. |
|
| Modified precompiles | 0 | No precompile modified. |
|
| Added system contracts | 0 | No system contract added. |
|
| Modified system contracts | 0 | No system contract modified. |
|
| EVM Gas rule changes | 0 | No execution-gas charging, metering or settlement rule changes. The new limit is a byte-size validity check. |
|
| State-access ordering within opcode execution | 0 | No opcode's state-access or gas-charge ordering changes. |
|
| Blob gas accounting changes | 0 | No blob-gas accounting change. |
|
| State gas accounting changes | 0 | No state-gas accounting change. |
|
| New EVM gas refund | 0 | No new refund mechanism. |
|
| New transaction types | 0 | No new transaction envelope. |
|
| New or modified transaction validity mechanisms | 0 | Consensus transaction-validity and intrinsic-gas rules are unchanged. Builders leaving out transactions to stay under the cap is block-construction policy, not a transaction-validity rule. |
Uncertainty: Each transaction's inclusion now depends on the block's cumulative encoded size. One could read that as a new block-level eligibility condition on transactions (level 1–2). |
| New block / header fields | 0 | No new header or block field. |
|
| Encoding changes (RLP/SSZ) | 0 | No serialized schema or codec changes. Only the length of the existing encoding is bounded. |
|
| New fork activation mechanism | 0 | Activating the fork only switches on a rule. No activation-specific state transition. |
|
| Engine API changesUnder-specified | 0 | No Engine API field or endpoint change is specified. An oversized payload would be handled by existing INVALID-status semantics, and payload building must respect the cap. Both are behaviors under existing contracts. |
Uncertainty: The EIP does not say how the cap applies to the payload as it arrives through the Engine API (reconstructed block RLP), or whether getPayload behavior needs explicit testing. No API change is specified. |
| Transition-tool interface changesUnder-specified | 0 | The block RLP is assembled and checked outside the transaction-level state transition, so no t8n field or mechanism is required. A tool that builds blocks could optionally report RLP size or a block exception, but the EIP does not require this. |
Uncertainty: If the framework relies on t8n to signal block-level exceptions or to limit which transactions it includes, one output field may be needed (level 1). |
| Patterns affecting pre-existing tests | 0 | Ordinary baseline tests use small blocks and are unaffected. Only tests that build blocks over about 9.5 MiB (for example, stress or high-gas-limit vectors) would need rework. No such family is established by the supplied evidence. |
Uncertainty: A baseline stress or benchmark family that uses very large blocks could need adjusting (level 1). No supplied test suite lets me confirm this. |
| New invariant on pre-existing tests | 0 | Baseline tests need no additional output assertion. The size check only affects validity. |
|
| Performance risks | 0 | The cap reduces the worst-case workload and adds no new resource-consuming workload. Computing the encoded size is cheap. No additional performance validation is established. |
Uncertainty: Builders may need incremental size tracking while assembling blocks, which might justify a component benchmark (level 1). |
| Cryptography | 0 | No cryptographic mechanism changes. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@040800a325EIPS/eip-7934.md committed 2025-05-06 · information cutoff 2025-05-09T21:56:48Z- 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/retrospective/outputs/assessments/osaka/eip-7934.yaml· sha256918300a8dadd