Evaluated on: · Spec revision: 2025-06-09 · c43098e67b
Scope at the cutoff. EIP-7939 (revision c43098e, Draft) adds one EVM instruction, CLZ (0x1e). It pops a single 256-bit word and pushes the number of leading zero bits, or 256 when the input is zero. It has a fixed gas cost of 3, the same as ADD. It has no immediate data and does not access state. The specification gives reference implementations in Solidity, Python and C++, plus six input/output test vectors. It changes no transactions, headers, Engine API, system contracts or precompiles.
- Evaluator
- LLMChecklist v3
- Confidence
- High
- Under-specified at assessment cutoff
- No
- Plausible range
- 3–5 (Low)
- Assessment cutoff
- 2025-07-02 · EIP revision
c43098e67b(2025-06-09)
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
Under-specified at assessment cutoff: No
The EIP text available at the assessment cutoff left material behavior unresolved. The affected criteria and the plausible total range record that uncertainty.
The assessor found no material behavior left unresolved by the EIP text at the cutoff.
Notable ambiguities noted by the assessor (3)
- The first test vector's PUSH32 literal has 63 hex digits instead of 64; it is clearly meant to be zero.
- The C++ reference assumes the uint32 limbs are ordered with x[7] as the most significant limb. This is an implementation detail, not a protocol rule.
- The gas cost is given as the number 3, without naming a fee constant such as Gverylow.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 1 | Exactly one simple instruction is introduced. |
Confidence: High |
| Patterns affecting pre-existing testsUnder-specified | 1 | Baseline tests that list undefined opcodes or expect 0x1e to halt exceptionally need updating for the target fork. This rework is limited to particular cases in one family (invalid/undefined-opcode tests). |
Confidence: Medium Uncertainty: Whether any baseline tests actually use byte 0x1e as an undefined-opcode case depends on the suite, which was not supplied. |
| Performance risks | 1 | A component benchmark of CLZ against ADD across client implementations is enough to confirm that 3 gas is safe, for example a block filled with CLZ calls. Baseline end-to-end assumptions do not change. |
Confidence: High |
| Edge/boundary conditions | 1 | There is one boundary-sensitive mechanism: the CLZ result function, with boundaries at zero, the most significant bit, the least significant bit and the 64/32-bit limb edges. Stack underflow with an empty stack and out-of-gas at cost 3 belong to the same instruction. There is no elevated matrix. |
Confidence: High |
Show 24 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified opcodes | 0 | Byte 0x1e was undefined before, so defining it is an added opcode, not a modification of an existing one. |
|
| Added precompiles | 0 | None introduced. |
|
| Modified precompiles | 0 | None modified. |
|
| Added system contracts | 0 | None introduced. |
|
| Modified system contracts | 0 | None modified. |
|
| EVM Gas rule changes | 0 | Assigning a constant cost to a new instruction uses the existing static-gas mechanism. No execution-gas charging, metering or settlement rule changes, and no baseline gas expectation changes. The opcode's own gas cost is covered by the opcode tests. |
Uncertainty: Someone could treat a new instruction's gas entry as a parameter addition (level 1). The rubric's level 1 requires existing rules or parameters to change, which they do not. |
| State-access ordering within opcode execution | 0 | The instruction is stateless. No state access or ordering between gas charging and state access is introduced or changed. |
|
| Blob gas accounting changes | 0 | Blob gas is not affected. |
|
| State gas accounting changes | 0 | No state-gas accounting changes. |
|
| New EVM gas refund | 0 | No refund mechanism is introduced. |
|
| New transaction types | 0 | None introduced. |
|
| New or modified transaction validity mechanisms | 0 | No transaction validity changes. |
|
| New block / header fields | 0 | None added. |
|
| Encoding changes (RLP/SSZ) | 0 | No encoding changes. |
|
| Block syncing changes | 0 | No block RLP or structural validation changes. |
|
| New fork activation mechanism | 0 | Activation only selects the new instruction table, which is ordinary rule selection. |
|
| Engine API changes | 0 | No Engine API changes. |
|
| Transition-tool interface changes | 0 | The transition tool's interface does not need to change. |
|
| New invariant on pre-existing tests | 0 | Baseline tests need no new assertion. |
|
| New test-framework primitivesUnder-specified | 0 | Adding a new opcode value to the framework's opcode table is a new parameter value, not a new primitive. Existing bytecode, state and expectation tooling is sufficient. |
Uncertainty: Registering the opcode in the framework could be read as a local extension (level 1). |
| Security risks | 0 | No security invariant or validation boundary is introduced or changed. Correctness and denial-of-service cost are already covered under opcode and performance testing. |
Uncertainty: Someone could argue for level 1 as a local check against mispriced denial-of-service, but that concern is covered by PERF. |
| Cryptography | 0 | No cryptographic mechanism is introduced or changed. The mention of post-quantum signature schemes in the Motivation refers to applications, not protocol behavior. |
|
| Cross-EIP interactions | 0 | CLZ can be tested on its own. No coordinated cross-EIP cases are established from the supplied evidence. |
Uncertainty: If some code-validation scheme active in the same fork (for example an EOF valid-opcode list) applied, a local compatibility check might be needed. No such scheme is supplied or referenced. |
| Unspecified behavior requiring cross-client consensus | 0 | The result for every input is fully determined. Stack underflow and out-of-gas follow standard EVM rules. The malformed literal in the test vector has only one intended meaning. |
Uncertainty: The text names no activating fork, which is outside the normative behavior of the opcode. |
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@c43098e67bEIPS/eip-7939.md committed 2025-06-09 · information cutoff 2025-07-02T17:49:36Z- 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-7939.yaml· sha256224f5e09c1ab