Evaluated on: · Spec revision: 2025-08-19 · f8be9ce27b
Scope at the cutoff. EIP-7997 (revision f8be9ce, Draft) sets the code of FACTORY_ADDRESS = 0x0B to a fixed bytecode when the EIP activates. The bytecode is a minimal factory written for the Constantinople instruction set, with no PUSH0. It reverts with empty data if calldata is shorter than 32 bytes. Otherwise it treats the first 32 bytes as the salt and the rest as initcode, then runs CREATE2 with all of the call's value. On success it returns the new address as a 32-byte word. On failure it reverts with the same return data. The EIP adds no opcode, precompile, transaction type, header field, gas rule or new cryptography. The work is a one-time code installation at activation, plus behavioural tests of a stateless system contract that wraps existing CREATE2 and RETURNDATA semantics.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 6 criteria affected
- Plausible range
- 12–19 (Medium)
- Assessment cutoff
- 2025-08-21 · EIP revision
f8be9ce27b(2025-08-19)
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
- New fork activation mechanism3
- Cross-EIP interactions2
- Unspecified behavior requiring cross-client consensus2
- Added system contracts1
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 revision specifies only the bytecode to install at 0x0B. It does not say whether 0x0B counts as a precompile for protocol rules (EIP-2929 default-warm set, EIP-7702 precompile-delegation rule). It does not give the account's nonce, balance or storage handling at activation. It does not address whether 0x0B is already occupied by a precompile in the baseline. Test Cases are TBD.
Plausible total
12–19
recorded score 12 · plausible tiers Medium
Unresolved questions at the cutoff (5)
- Is 0x0B added to the set of addresses that are warm by default (EIP-2929), like precompiles?
- Does EIP-7702 delegation to 0x0B count as delegating to a precompile (empty code) or to a normal contract?
- What nonce is set at 0x0B on activation, and is any existing balance or storage kept or cleared?
- How does the insertion interact with an existing precompile at 0x0B in the baseline, if there is one?
- At which block does the insertion happen (first fork block), and how does that apply at genesis?
Notable ambiguities noted by the assessor (4)
- The rationale says 0x0B is the next free address after existing precompiles. Under the Osaka baseline that address may already be an active precompile; the supplied text does not reconcile this.
- 'System contract in the precompile range' leaves it unclear whether precompile-specific protocol rules (warm set, 7702 delegation handling) apply.
- The account nonce at installation is unspecified, so post-deployment nonce expectations are ambiguous.
- The Test Cases section is TBD, so no reference vectors exist.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| New fork activation mechanism | 3 | Code installation at 0x0B is mandated by the protocol at activation and is not done by an ordinary transaction. It is a one-time state transition at the fork block, unlike ordinary post-fork processing. Tests must cover the transition: absent before, present from the activation block onward, with balance and nonce handled correctly. |
Confidence: High Uncertainty: The EIP does not say what happens to 0x0B's existing balance, nonce or storage, or how activation behaves at genesis versus mid-chain. |
| Cross-EIP interactionsUnder-specified | 2 | Coordinated cross-EIP cases are needed. EIP-1014: addresses derived with sender 0x0B, repeated salt/initcode collisions, and the factory's nonce increment. EIP-211: revert data from failed initcode passed through via RETURNDATACOPY, and the empty buffer on success. EIP-7702: EOAs delegating to 0x0B, and delegated accounts calling the factory. These are bounded, not a coupled restructuring of shared vectors, so level 2. |
Confidence: Medium Uncertainty: Unnumbered interactions may also need cases: EIP-2929 warm status, initcode size and word-cost limits, the 0xEF code-prefix ban, static-context CREATE2 failure, and a possible baseline precompile collision. Interacting EIPs: EIP-1014, EIP-211, EIP-7702 |
| Unspecified behavior requiring cross-client consensusUnder-specified | 2 | There are localized competing outcomes. (a) Is 0x0B in the EIP-2929 default-warm precompile set, which changes call costs? (b) Does EIP-7702 delegation to 0x0B run empty code or the factory code? (c) What are the account nonce and existing balance at activation? A zero nonce works for CREATE2, while a nonce of 1 matches contract conventions; this affects the nonce after deployments. (d) A possible collision with an existing baseline precompile at 0x0B. Each produces observable consensus results and needs agreement before expected values can be fixed. |
Confidence: Medium Uncertainty: Point (d) relies on general knowledge of the baseline precompile map rather than the supplied text. Without (d) the level is still 2 because of (a) and (b). |
| Added system contracts | 1 | Exactly one protocol-designated stateless contract (no persistent storage), with no protocol effect beyond the ordinary call result. |
Confidence: High Uncertainty: The factory's account nonce changes with each successful CREATE2, but that is not storage. |
| Patterns affecting pre-existing testsUnder-specified | 1 | On the EIP's premise, baseline tests that treat 0x0B as an empty or non-existent account need new expected values. Examples are EXTCODESIZE/EXTCODEHASH/EXTCODECOPY, calls to the address, and tests that iterate over precompile-range addresses. This rework is confined to particular address-parameter cases. |
Confidence: Low Uncertainty: From general knowledge of the baseline, 0x0B may already be an active precompile in Osaka (the BLS12-381 range). The supplied text does not mention this. If the address is occupied, the rework could cover a whole precompile family (up to level 2). |
| New test-framework primitives | 1 | The framework needs a local extension: fork-dependent pre-allocation of the factory account in genesis, and fork-transition expectations that the code appears at activation. These are extensions of existing pre-alloc and transition-fork primitives, not a new abstraction. |
Confidence: Medium Uncertainty: Actual framework support was not evidenced. |
| Security risksUnder-specified | 1 | Security conditions can be checked locally: the exact installed bytecode, correct revert and return-data handling, value forwarding, and correct failure on address collision. Other components' assumptions do not change. Frontrunning is application-level. |
Confidence: Medium Uncertainty: If 0x0B is treated as a precompile for EIP-7702 delegation or warm-set purposes, or collides with an existing precompile, the impact goes beyond a local check (up to level 2). |
| Edge/boundary conditions | 1 | One new boundary-sensitive rule: the 32-byte minimum calldata length (31 bytes reverts empty; 32 bytes is an empty-initcode deployment; 33+ bytes carries initcode). Other limits that tests should exercise through the factory are inherited, not changed: initcode size, value, collisions and the CREATE2 failure path. |
Confidence: High |
Show 20 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | No new instruction. |
|
| Modified opcodes | 0 | No instruction semantics change; calling new contract code does not count. |
|
| Added precompiles | 0 | EVM system contracts are excluded; no native precompile is added. |
Uncertainty: Clients may need to decide whether 0x0B is treated as a 'precompile' for EIP-2929 warm-set and EIP-7702 delegation purposes. That question is recorded under UNSP. |
| Modified precompilesUnder-specified | 0 | As written, the EIP changes no existing precompile. |
Uncertainty: From baseline protocol knowledge, Osaka may already have a precompile at 0x0B (BLS12-381 range). Installing code there would then collide with, or replace, a complex precompile. The supplied text does not address this, so the plausible range is 0–3. |
| Modified system contracts | 0 | Deploying a new system contract is not a modification. |
|
| EVM Gas rule changesUnder-specified | 0 | No execution-gas accounting rule changes. Gas used by factory calls comes from ordinary charges for existing instructions, including the CREATE2 hashcost from EIP-1014. |
Uncertainty: The EIP calls 0x0B a 'system contract in the precompile range' but does not say whether it joins the set of addresses that are warm by default under EIP-2929, as precompiles are. If it did, the access cost for calling 0x0B would change (level 0–1). |
| State-access ordering within opcode execution | 0 | No instruction's state-access or gas-charge ordering changes, and no new ordering rule is introduced. Changed contract internals do not modify how an instruction orders its accesses. |
|
| Blob gas accounting changes | 0 | No blob-gas accounting changes. |
|
| State gas accounting changes | 0 | Using an unchanged state-writing operation (CREATE2) does not introduce state-gas accounting. |
|
| New EVM gas refund | 0 | No new refund mechanism. |
|
| New transaction types | 0 | No new transaction envelope. |
|
| New or modified transaction validity mechanisms | 0 | No consensus transaction-validity change. |
|
| New block / header fields | 0 | No header or block member added. |
|
| Encoding changes (RLP/SSZ) | 0 | No schema or codec change. |
|
| Block syncing changes | 0 | No block RLP or structural validation change. |
|
| Engine API changes | 0 | No Engine API change. |
|
| Transition-tool interface changes | 0 | Fork-aware behaviour (installing code at activation) needs no new t8n field or exchange mechanism. |
Uncertainty: No t8n evidence was supplied. Whether the tool applies the insertion at the transition block, or expects it in the supplied alloc, is a design choice. |
| New invariant on pre-existing tests | 0 | Baseline tests gain no new output to assert. The installed account appears in pre-state or allocation; it is not a new output produced while tests run. |
Uncertainty: Fixtures that start at the fork must include the factory account in genesis, which changes state roots. This is closer to fixture construction than to a new assertion (at most level 1). |
| Performance risks | 0 | Everything the factory does was already possible through user-deployed factories; no workload or resource bound changes. |
|
| Cryptography | 0 | Unchanged hashing is reused; no cryptographic mechanism changes. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@f8be9ce27bEIPS/eip-7997.md committed 2025-08-19 · information cutoff 2025-08-21T13:34:18Z- 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/amsterdam/eip-7997.yaml· sha256d8eb22a75c61 - Supporting documents supplied with the EIP
supporting/eip-155.md,supporting/eip-211.md,supporting/eip-1014.md,supporting/eip-5792.md,supporting/eip-7702.md