Evaluated on: · Spec revision: 2026-10-07 · 6dac5e7491 · EIP-8081 list: CFI
Scope at the cutoff. EIP-8298 adds one EVM instruction, SETCODEFROM(source). It sets the current execution-environment account's codeHash to the codeHash of a live source account. The source must exist, have non-empty code, not start with 0xEF, and not have been created in the current transaction. The instruction is allowed in deployed code (including EIP-7702 delegated execution) and in initcode. When initcode adopts code this way, contract-creation completion skips return-data validation, installation and all code-deposit gas, both execution and state. The opcode charges tiered execution gas from EIP-8038 parameters and no state gas. It extends the EIP-7928 BAL CodeChange with an optional trailing new_code_hash element for adopted code. It also states non-consensus public-mempool rules for EIP-8141 frame transactions, and relies on EIP-3607 and EIP-7702 to permanently disable ECDSA origination for migrated EOAs.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 6 criteria affected
- Plausible range
- 30–36 (High)
- 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: Several localized details are open. Source validity is open-ended ('valid regular deployed code under the active fork, e.g.'). BAL recording is undefined when an adopted code hash nets back to its pre-transaction value. SETCODEFROM is not mapped onto EIP-7928's pre-state/post-state BAL inclusion rules. The EIP-8279 metering size for adoption entries is not given. How BAL decoding and validation map onto block-import structural checks is only implied.
Plausible total
30–36
recorded score 34 · plausible tiers High
Unresolved questions at the cutoff (5)
- Beyond the 0xEF prefix, what makes source code 'valid regular deployed code under the active fork' (e.g., legacy code exceeding a current size limit)?
- If an account adopts a hash and then later adopts back its pre-transaction hash, is a CodeChange recorded?
- If gas covers the cold source access but not the extra WARM_ACCESS for code validation, is the source included in the BAL?
- Is the static-context halt checked before or after gas and state access, which affects BAL inclusion of the source?
- How many BAL bytes should EIP-8279 meter for an adoption entry?
Notable ambiguities noted by the assessor (5)
- SETCODEFROM_OPCODE byte is TBD.
- 'e.g.' in the source-validity rule leaves additional code-validity conditions undefined.
- BAL net no-op code-hash changes are not addressed.
- The Test Cases section is a TODO.
- The Public Mempool rules use 'should', and their non-consensus status relative to EIP-8141 is stated but not tested as consensus.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Cross-EIP interactionsExceptional | 4 | The target couples behavior from EIP-7702, 3607, 6780, 7928, 8037 and 3541. Coordinated scenarios are needed across them, e.g. delegate execution → SETCODEFROM → later tx rejected and authorization rejected, with the BAL hash-form recorded and state-gas accounting checked for adopted creations. |
Confidence: Medium Interacting EIPs: EIP-7702, EIP-3607, EIP-6780, EIP-7928, EIP-8037, EIP-8038, EIP-3541, EIP-8141, EIP-8151, EIP-8279 |
| Modified opcodes | 3 | The completion semantics of CREATE/CREATE2 change: a new code-installation rule, and return data that would fail validation (oversize or 0xEF prefix) no longer causes failure after adoption. |
Confidence: Medium Uncertainty: These changes are only reachable after SETCODEFROM executes. One could argue they belong to the new opcode, but CREATE's specified completion rule is altered. |
| Encoding changes (RLP/SSZ) | 3 | The RLP schema of an EL block-level object, the BAL's CodeChange, changes. |
Confidence: High |
| Security risks | 3 | The shared invariant that deployed code is immutable (apart from creation, delegation, and same-tx SELFDESTRUCT) changes. This affects the EVM, BAL completeness and executionless consumers, code-database availability, transaction-origination authority (EIP-3607/7702), and mempool validation (EIP-8141). Coordinated adversarial scenarios are needed, for example transitive adoption chains and re-entrancy into accounts under construction. |
Confidence: Medium |
| Edge/boundary conditions | 3 | Several boundary-sensitive mechanisms are introduced: source validity, tiered gas, the creation-completion branch, and BAL form selection. The gas outcome is an elevated matrix of interacting dimensions (cold/warm × validity × hash equality, plus out-of-gas at each tier). The creation path interacts adoption × return-data validity (oversize or 0xEF) × new/existing destination × revert/halt. |
Confidence: Medium |
| Added opcodes | 2 | Exactly one instruction is added. It is complex because its gas is not constant. |
Confidence: High |
| EVM Gas rule changes | 2 | The new instruction brings its own conditional, multi-stage charging rule, and adopted creations get a new code-deposit exemption. Without SETCODEFROM, baseline operations keep their expected gas results. This matches level 2: a new mechanism without changing baseline expectations. |
Confidence: Medium Uncertainty: It is arguable whether a new opcode's schedule built from existing parameters counts as a 'new accounting mechanism'. The conditional tiers and the creation exemption support level 2. |
| State-access ordering within opcode executionUnder-specified | 2 | This is a new state-accessing operation (it reads the source account and its code, and writes the current account's codeHash). It needs its own ordering rule for gas charges against accesses and for BAL inclusion, covering cold/warm source, valid/invalid source, same/different hash, and static/non-static context. It does not change ordering for an existing opcode class, so level 2. |
Confidence: Medium Uncertainty: The EIP does not map SETCODEFROM onto EIP-7928's pre-state/post-state table. It is unclear whether a cold source enters the BAL when gas covers the account access but not the extra WARM_ACCESS for code validation. |
| State gas accounting changesUnder-specified | 2 | The EIP adds a conditional exemption to the EIP-8037 code-deposit state-gas charge at the creation site, keyed on whether the created account adopted code. It interacts with the account-creation charge and with refill on revert. It is not just a parameter change, and it adds no new state-gas mechanism or spill change. Level 2 is the closest fit (a changed charging condition at a site, using the existing mechanism). |
Confidence: Medium Uncertainty: This could be read as level 1, because no new charging site is added; the existing one is conditionally zeroed. |
| Block syncing changesUnder-specified | 2 | Block import must decode and validate the changed CodeChange structure: optional trailing hash, empty bytecode in the hash form, 32-byte hash. These are multiple simple structural rules. Choosing the correct form is decided by comparison with the executed BAL. |
Confidence: Low Uncertainty: The BAL is carried in the payload rather than the block body, and form selection depends on execution. Whether these count as structural block validation (and whether any are 'complex') is debatable. |
| Performance risks | 2 | Targeted benchmarks are needed for a bounded interaction. The cases are: repeated cold or warm SETCODEFROM with code-store inspection priced at 100 gas regardless of code size; cheap mass adoption of maximum-size code; and code-database retention or reference handling for hashes referenced only through adoption. |
Confidence: Medium Uncertainty: The code-store read cost depends on whether clients load full code or only the prefix. No benchmark evidence was supplied. |
| Unspecified behavior requiring cross-client consensus | 2 | Several localized outcomes have competing readings. These are: what makes source code 'valid regular deployed code' beyond the 0xEF prefix; whether a codeHash that returns to its pre-tx value creates a CodeChange entry; and BAL inclusion of the source when out of gas between access and code validation. Agreement is needed before fixed expected results can be written. |
Confidence: Medium Uncertainty: The surrounding EIP-7928 rules on no-op writes and pre-state checks may imply defaults, but the target does not state them. |
| Engine API changesUnder-specified | 1 | The contents of the existing blockAccessList field change meaning or format. That is one field change, with no new method or exchange behavior. |
Confidence: Low Uncertainty: The field is opaque RLP bytes, so this could also be seen as no Engine API change. |
| Transition-tool interface changesUnder-specified | 1 | If the transition tool emits or consumes BALs, the code_changes entry gains one optional field (new_code_hash). That is one field changed, with no new mechanism. |
Confidence: Low Uncertainty: No transition-tool documentation was supplied. Whether the tool carries the BAL is assumed from the Amsterdam baseline. |
| Patterns affecting pre-existing tests | 1 | The only baseline rework is in undefined/invalid-opcode tests that use the newly allocated byte, a localized case within one family. Creation and BAL baselines are preserved by design. |
Confidence: Medium Uncertainty: The opcode byte is TBD, so which invalid-opcode tests are affected is unknown. |
| New test-framework primitives | 1 | The existing BAL expectation primitive needs a local extension for the hash-form CodeChange, and account expectations need adopted-code checks. No new shared abstraction is required. |
Confidence: Medium |
Show 12 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added precompiles | 0 | None. |
|
| Modified precompiles | 0 | No precompile change is required by the target. |
|
| Added system contracts | 0 | None introduced. |
|
| Modified system contracts | 0 | No system contract rules change. |
|
| Blob gas accounting changes | 0 | No blob-gas rule is touched. |
|
| New EVM gas refund | 0 | No refund mechanism is introduced. |
|
| New transaction types | 0 | None. |
|
| New or modified transaction validity mechanismsUnder-specified | 0 | No consensus validity or intrinsic-gas rule is changed. Existing EIP-3607 and EIP-7702 rules apply to newly reachable states, and that is tested as a cross-EIP interaction. |
Uncertainty: Testing that a sender is rejected after an in-block code adoption could be seen as validity-test work (level 1). |
| New block / header fields | 0 | No new header field. |
|
| New fork activation mechanism | 0 | No activation-specific state transition. |
|
| New invariant on pre-existing tests | 0 | Baseline tests need no new assertion. |
|
| Cryptography | 0 | Code hashes are copied and compared, not computed under new rules. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@6dac5e7491EIPS/eip-8298.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-8298.yaml· sha2561cec80efaf14 - Supporting documents supplied with the EIP
supporting/eip-20.md,supporting/eip-3541.md,supporting/eip-3607.md,supporting/eip-6780.md,supporting/eip-6913.md,supporting/eip-7702.md,supporting/eip-7928.md,supporting/eip-8037.md,supporting/eip-8038.md,supporting/eip-8141.md,supporting/eip-8151.md,supporting/eip-8279.md