Evaluated on: · Spec revision: 2026-10-07 · 6dac5e7491 · EIP-8081 list: CFI
Scope at the cutoff. EIP-7979 adds three EVM instructions: CALLSUB (pop a destination, push PC+1 to a new return stack, jump), CALLDEST (a no-op subroutine-entry label costing 1 gas), and RETURNSUB (pop the return stack into the PC). The return stack is a new part of machine state that EVM code cannot read or write directly. It holds at most 1024 entries, and both overflow and underflow cause an exceptional halt. Jump-destination analysis is extended so CALLDEST is a valid target for CALLSUB, JUMP and JUMPI, which changes the set of valid destinations for the existing jump instructions. Opcode byte values are still to be decided. EIP-8173 is an informational background document and defines no protocol rules.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 3 criteria affected
- Plausible range
- 12–15 (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
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 opcode byte values are not yet assigned. The return stack's scope (per execution frame vs shared across nested calls) is implied by calling it machine state, not stated explicitly. The order of CALLSUB's checks is unspecified but not observable.
Plausible total
12–15
recorded score 13 · plausible tiers Medium
Unresolved questions at the cutoff (3)
- Which opcode byte values will CALLSUB, CALLDEST and RETURNSUB use?
- Is the return stack explicitly fresh and empty for each new message-call or create frame, and discarded on return?
- Does the 1024 return-stack limit apply per frame or across the whole call depth?
Notable ambiguities noted by the assessor (3)
- The EIP says JUMP and JUMPI 'need no change', yet their valid-destination set now includes CALLDEST, which is an observable semantic change.
- The placeholder opcodes 0xB0–0xB2 in the test cases are explicitly unconfirmed.
- Per-frame return-stack isolation is inferred from the 'machine state' wording and the EELS Evm dataclass, not stated normatively.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified opcodes | 3 | JUMP and JUMPI change control-flow and exceptional-halt semantics: jumping to a CALLDEST byte now succeeds where it previously halted. This is a semantic change beyond gas, so the level is 3. |
Confidence: High Uncertainty: The EIP describes JUMP as needing 'no change' in code, but the observable semantics do change. |
| Added opcodes | 2 | Multiple instructions are added and all meet the rubric's definition of simple (no immediates, fixed stack effects, constant gas), so the level is 2. The new return-stack state adds test content but does not change the classification under the rubric definition. |
Confidence: High |
| Security risksUnder-specified | 2 | Beyond local opcode checks, the change alters the jump-destination validity that existing JUMP/JUMPI and client code-analysis caches rely on. The return stack must also stay isolated per execution frame across CALL/CREATE boundaries. These bounded interactions call for targeted differential fuzzing and review. |
Confidence: Medium Uncertainty: If these are treated as purely interpreter-local checks, level 1 applies. |
| Edge/boundary conditions | 2 | Several independent boundary-sensitive rules are introduced: the return-stack depth limit (1023/1024/1025), underflow on an empty return stack, destination validity (CALLDEST vs JUMPDEST vs PUSH data vs out of range vs large 256-bit values), and return past end of code. The instruction × destination-type table is small and can be enumerated, so it is not treated as an elevated matrix. |
Confidence: Medium Uncertainty: The {CALLSUB, JUMP, JUMPI} × {CALLDEST, JUMPDEST, PUSH-data, out-of-range} combinations could be argued to form an elevated matrix, which would give level 3. |
| Patterns affecting pre-existing testsUnder-specified | 1 | Baseline rework is limited to boundary cases: invalid/undefined-opcode tests that cover the three newly assigned bytes, and invalid-jump-destination cases that happen to target those bytes. Ordinary cases do not change, so this is level 1. |
Confidence: Medium Uncertainty: Since the opcode values are not assigned, it is not yet known which baseline vectors use those bytes. |
| New test-framework primitives | 1 | Adding entries to the existing opcode definitions is a local extension of an existing primitive. The return stack is unobservable, so behavior is checked through ordinary storage and gas results, and no new expectation abstraction is needed. |
Confidence: Medium |
| Performance risks | 1 | Component benchmarks of the new opcodes and of worst-case return-stack growth (including deep recursion) and the extended destination analysis cover the changed workload. Baseline end-to-end assumptions are not changed. |
Confidence: Medium Uncertainty: If return stacks are allocated per frame across nested call depth, a targeted integrated benchmark might be warranted (level 2). |
| Unspecified behavior requiring cross-client consensusUnder-specified | 1 | Some details are left open: the opcode values, and per-frame scope of the return stack is stated only implicitly. The surrounding text (machine state, the EELS Evm dataclass) supports one intended outcome. In CALLSUB, the order of the destination check and the overflow check is not observable because both are exceptional halts. |
Confidence: Medium Uncertainty: Opcode assignment must be agreed before vectors are final, which could be read as level 2. |
Show 20 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added precompiles | 0 | None. |
|
| Modified precompiles | 0 | None. |
|
| Added system contracts | 0 | None. |
|
| Modified system contracts | 0 | None. |
|
| EVM Gas rule changes | 0 | The only gas items are constant costs for new instructions, using existing tiers. No metering, limit or settlement rule changes, and no existing operation's gas result changes. Testing these costs belongs under added opcodes. |
Uncertainty: The EIP notes that benchmarking may change the costs, but these would still be constant per-opcode costs. |
| State-access ordering within opcode execution | 0 | No state access or access-list behavior is added or reordered. |
|
| Blob gas accounting changes | 0 | Blob gas is not affected. |
|
| State gas accounting changes | 0 | State-gas accounting is not affected. |
|
| New EVM gas refund | 0 | No refund mechanism is added. |
|
| New transaction types | 0 | None. |
|
| New or modified transaction validity mechanisms | 0 | Transaction validity and intrinsic gas are unchanged. |
|
| New block / header fields | 0 | None. |
|
| Encoding changes (RLP/SSZ) | 0 | No schema or codec changes. |
|
| Block syncing changes | 0 | No block-level validation changes. |
|
| New fork activation mechanism | 0 | No activation-specific state transition is needed. |
|
| Engine API changes | 0 | The Engine API is unchanged. |
|
| Transition-tool interface changes | 0 | The transition tool's inputs and outputs are unchanged. |
Uncertainty: Optional trace output for the return stack would be tooling only, not a consensus interface change. |
| New invariant on pre-existing tests | 0 | Baseline tests need no new assertion. |
|
| Cryptography | 0 | No cryptographic mechanism is added or changed. |
|
| Cross-EIP interactions | 0 | The only candidate EIP, EIP-8173, has no protocol rules to interact with. The supplied documents name no other EIP-defined behavior needing coordinated cases, so the level is 0. |
Uncertainty: Return-stack isolation across call frames (e.g., DELEGATECALL or CREATE-family frames) may warrant compatibility checks, but the supplied text does not name these interactions. |
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@6dac5e7491EIPS/eip-7979.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-7979.yaml· sha256ae4524a7ce48 - Supporting documents supplied with the EIP
supporting/eip-8173.md