Evaluated on: · Spec revision: 2026-08-25 · ac450a4ab2 · Inclusion status at snapshot: PFI
Scope at the cutoff. Execution-layer assessment of the sealed Draft of EIP-8298: one runtime-only EVM instruction that adopts a live source account's code hash, charges a fixed base plus active warm/cold account-access gas, mutates the current execution-environment account with revert semantics, and makes the new code visible to later execution while the current frame continues its already-loaded code.
- Evaluator
- LLMChecklist v2
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 6 criteria affected
- Plausible range
- 21–23 (Medium–High)
- Snapshot
- 2026-08-25 · EIP revision
ac450a4ab2(2026-08-25)
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
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: Material under-specification remains in the opcode assignment, the exact source-access/gas/check ordering, and the exhaustive definition of valid regular deployed source code. These are recorded once here; their direct scoring consequences are confined to the listed criteria.
Plausible total
21–23
recorded score 22 · plausible tiers Medium, High
Unresolved questions at the cutoff (4)
- What numeric value is SETCODEFROM_OPCODE?
- In what exact order are stack/context checks, base-gas charging, source access and warming, source-code reads, validity checks, and the current-account write performed, especially at out-of-gas boundaries and in static or initcode execution?
- What is the exhaustive active-fork predicate for valid regular deployed source code beyond the stated 0xEF example?
- Are later EXTCODE* observations of the current account required to change immediately while CODESIZE and CODECOPY remain bound to the current frame's already-loaded code?
Notable ambiguities noted by the assessor (3)
- The access-ordering test space is multiplicative: cold/warm, static/non-static, initcode/deployed, delegated/direct, valid/invalid source, sufficient/insufficient gas, success/revert, and later direct/re-entrant observation can change the expected result or recorded access.
- The 3000 base charge is justified by analogy to a warm nonzero-to-nonzero SSTORE, but it is a fixed SETCODEFROM rule rather than reuse of SSTORE net-metering or refund semantics.
- The draft says regular code adoption disables ECDSA transaction origination permanently at protocol level, while application-level signature recovery remains possible unless the separately specified companion behavior is also adopted.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Cross-EIP interactionsUnder-specifiedExceptional | 4 | The coordinated set is 2200, 2929, 3541, 3607, 7702, 7928, 8037, and 8151. Gas/warmth, deployed-code validity, authority-account selection, sender and authorization validity, block-level access recording, state-growth pricing, and ecRecover behavior each need targeted combined cases. With eight interactions, the rubric gives base score 3 plus one increment for at least three additional interactions beyond the first three. Exceptional score: The score of 4 is the rubric's mechanical uncapped result: eight identified interacting EIPs produce score 3 plus one increment for the first group of three additional interactions beyond the initial three. |
Confidence: Medium Uncertainty: 6913 is only a withdrawn comparison and 20 only an application example, so neither is counted. Additional active-fork code-validity rules are not exhaustively identified by the draft. Interacting EIPs: EIP-2200, EIP-2929, EIP-3541, EIP-3607, EIP-7702, EIP-7928, EIP-8037, EIP-8151 |
| EVM Gas rule changesUnder-specified | 3 | This is a new dynamic opcode-gas rule, and executing it participates in the existing transaction-wide warmth mechanism, so it can change gas charged by later existing account-access operations. That reaches score 3 rather than a self-contained constant schedule. |
Confidence: Medium Uncertainty: The score assumes participation in accessed_addresses follows the cited active warm/cold mechanism; EIP-8298 does not fully order the base charge, account access, warming, and exceptional-context checks. |
| Security risks | 3 | The mechanism crosses critical account authority, code identity, delegated execution, storage compatibility, transaction origination, re-entrancy, and revert boundaries. Incorrect implementation or exposure can transfer control or strand an account, warranting extensive review and fuzzing. |
Confidence: High Uncertainty: The package is explicit about the risk classes, but the TODO tests and open source-validity predicate leave their final test matrix incomplete. |
| Edge/boundary conditionsUnder-specified | 3 | Several independent boundaries exist, and temporal visibility plus re-entrancy requires an elevated cross-product of context, source validity, warmth, gas boundary, success/revert, and delegated/direct cases. |
Confidence: High Uncertainty: The source-validity predicate is illustrative rather than exhaustive, so the final boundary set may be larger. |
| Unspecified behavior requiring cross-client consensusUnder-specified | 3 | Several constructible outcomes cannot yet be baselined, including bytecode selection, access-list/gas-boundary effects, and the complete source-validity predicate. Those gaps concern a newly observable code-identity transition and can require vectors to be re-derived as the draft is amended. |
Confidence: Medium Uncertainty: The sealed package provides Draft status but no permitted evidence about implementations, devnets, or discussion resolution; the score rests only on the visible normative gaps. |
| Added opcodes | 2 | This is one complex opcode because its cost is dynamic and it performs state access and conditional state mutation. |
Confidence: High Uncertainty: The missing numeric assignment blocks final bytecode vectors but does not change the count or complex character of the opcode. |
| State-access ordering within opcode executionUnder-specified | 2 | A new state-accessing operation is introduced, and the position of its source access and warmth update relative to gas charging and exceptional-context checks must be settled. This matches the score-2 anchor for one new state-accessing operation. |
Confidence: High Uncertainty: The draft does not say whether static/initcode failure, insufficient gas, or a failed source-validity check occurs before or after the source is recordably accessed and warmed. |
| Patterns affecting pre-existing testsUnder-specified | 1 | The affected pre-existing category is narrow: invalid/unassigned-opcode behavior at the eventual opcode byte and any deployed bytecode containing it. This is a minor subset rather than a broad rework. |
Confidence: Medium Uncertainty: Because the opcode byte remains TBD, the exact existing-test subset cannot yet be identified. |
| Performance risks | 1 | The new read/write path needs isolated benchmarking, especially for cold versus warm access and journaling, but it is bounded and does not add bytecode copying or a size-dependent workload. |
Confidence: Medium Uncertainty: The package contains no benchmarks or performance-validation plan, so cache, journaling, and repeated-update costs are not quantified. |
Show 19 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified opcodes | 0 | Existing operations can observe state changed by SETCODEFROM, but their own behavior is not modified by the proposal. |
Uncertainty: Code-inspection cases need tests, but the package frames their changed results as consequences of the new state mutation rather than modified opcode semantics. |
| Added precompiles | 0 | No precompile is added. |
Uncertainty: The source exclusion is an opcode validation branch, not a precompile addition. |
| Modified precompiles | 0 | EIP-8298 does not alter precompile logic or gas accounting. |
Uncertainty: Co-activation with the companion proposal is handled as a cross-EIP interaction, not attributed as an EIP-8298 precompile modification. |
| Added system contracts | 0 | No system contract is introduced. |
Uncertainty: The factory and wallet templates are application examples, not added system contracts. |
| Modified system contracts | 0 | There is no direct or package-evidenced indirect modification to a pre-existing system contract. |
Uncertainty: Generic accounts could choose to execute the opcode, but the sealed package identifies no system-contract consumer. |
| Blob gas accounting changes | 0 | No blob-gas counter, price, limit, or charging rule is introduced or modified. |
Uncertainty: No blob-related behavior appears in the sealed proposal. |
| State gas accounting changes | 0 | SETCODEFROM reuses already-stored bytecode and introduces no state-gas rate, budget change, reservoir rule, or state-gas charging site. Its specified charge is execution gas. |
Uncertainty: The proposal does not explicitly use the state-gas vocabulary for its codeHash write, but its no-new-bytecode rationale and complete SETCODEFROM_GAS formula provide no package evidence for a state-gas change. |
| New EVM gas refund | 0 | No new gas-refund mechanism is introduced. Reverting the code update is ordinary state reversion, not a gas refund. |
Uncertainty: No refund behavior is stated anywhere in the sealed EIP. |
| New transaction types | 0 | No new transaction type is introduced. |
Uncertainty: The instruction can execute within existing transaction execution, subject to its initcode prohibition. |
| New or modified transaction validity mechanisms | 0 | SETCODEFROM creates account state to which existing validity rules apply; it does not create or modify the validity mechanism or intrinsic gas calculation of a transaction type. |
Uncertainty: The consequence is security-critical and requires cross-EIP tests, but it is not itself a transaction-validity rule change under this anchor. |
| New block / header fields | 0 | No new block or block-header field is introduced. |
Uncertainty: No header surface appears in the sealed proposal. |
| Encoding changes (RLP/SSZ) | 0 | No RLP, SSZ, transaction, block, or interface encoding changes are introduced. |
Uncertainty: Assigning an opcode byte is EVM bytecode semantics, not an encoding change at the levels named by this anchor. |
| Block syncing changes | 0 | No block RLP validation mechanism requiring syncing tests is introduced. |
Uncertainty: No block-serialization surface appears in the package. |
| New fork activation mechanism | 0 | No account state, pre-existing internal variable, or similar value is modified specifically at the activation block. |
Uncertainty: Normal opcode-table activation is not an irregular fork-activation mechanism under this anchor. |
| Engine API changes | 0 | No Engine API field, endpoint, or communication mechanism is added or modified. |
Uncertainty: No Engine API surface is described. |
| Transition-tool interface changes | 0 | No transition-tool input or output field and no new interface mechanism is specified. |
Uncertainty: Implementations need opcode support, but that is not evidence of an interface-field change under this anchor. |
| New invariant on pre-existing tests | 0 | Tests unrelated to SETCODEFROM do not gain a mechanically required new assertion merely because the fork activates. |
Uncertainty: The Test Cases section is TODO, but no package text defines a fork-wide output or invariant for every pre-existing test. |
| New test-framework primitives | 0 | The package does not establish a need for a new expectation type, modifier, or framework-level helper beyond composing opcode, call, state, and revert tests. |
Uncertainty: The absent test design limits confidence that existing helpers cover same-transaction code replacement ergonomically, but no required primitive is evidenced. |
| Cryptography | 0 | No cryptographic mechanism is introduced or modified. Existing hash and ECDSA consequences are state-identity interactions, not new cryptography in this EIP. |
Uncertainty: The proposal's PQ motivation does not change the execution-layer mechanism scored here. |
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@ac450a4ab2EIPS/eip-8298.md committed 2026-08-25 · information cutoff 2026-08-25T11:56:58Z- 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/08-hegota-prospective-complexity-assessment/outputs/assessments/hegota-pfi-2026-08-26/eip-8298.yaml· sha2561b7eed2ca59d - Supporting documents in the sealed package
supporting/eip-20.md,supporting/eip-2200.md,supporting/eip-2929.md,supporting/eip-3541.md,supporting/eip-3607.md,supporting/eip-6913.md,supporting/eip-7702.md,supporting/eip-8037.md,supporting/eip-8151.md