Evaluated on: · Spec revision: 2026-10-07 · 6dac5e7491 · EIP-8081 list: CFI
Scope at the cutoff. EIP-4758 renames SELFDESTRUCT to SENDALL and changes what it does. The opcode now only moves all ETH in the executing account to the target. It no longer deletes code or storage, and it no longer changes the nonce. The EIP also removes every refund related to SELFDESTRUCT. As a result, redeploying a contract at the same address with CREATE2 after destroying it no longer works. Applications that use SELFDESTRUCT only to pull out funds keep working.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 4 criteria affected
- Plausible range
- 11–15 (Low–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
- Modified opcodes3
- Patterns affecting pre-existing tests2
- Cross-EIP interactions2
- Unspecified behavior requiring cross-client consensus2
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 details are left open. The Abstract says ETH goes to the 'caller' while the Specification says 'target'. The EIP does not say whether SENDALL halts execution. It does not say what happens to ETH when target==self. Its gas cost is not restated.
Plausible total
11–15
recorded score 11 · plausible tiers Low, Medium
Unresolved questions at the cutoff (4)
- Does ETH go to the caller (Abstract) or to the stack-provided target (Specification)?
- Does SENDALL halt execution as SELFDESTRUCT does, or does execution continue?
- When target==self, is the balance kept or burned?
- Do the SELFDESTRUCT gas schedule (base, cold access, new-account charges) and static-context restriction stay unchanged?
Notable ambiguities noted by the assessor (4)
- The Abstract ('to the caller') contradicts the Specification ('to the target') on who receives the ETH.
- The EIP does not say whether SENDALL halts execution.
- The EIP does not say what happens to ETH when the target is the account itself. In the baseline, a contract created in the same transaction burns ETH this way.
- The refund removal appears to be a no-op against the Amsterdam baseline. The EIP predates the baseline and does not address that.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Modified opcodes | 3 | The state effects of SELFDESTRUCT change: it no longer deletes code, storage or the nonce, even for contracts created in the same transaction. This is a semantic change beyond gas or ordering, which is level 3. |
Confidence: High |
| Patterns affecting pre-existing testsUnder-specified | 2 | Several families need their expected results reworked in specific cases. These include SELFDESTRUCT tests where the contract was created in the same transaction (including SELFDESTRUCT inside initcode and burning ETH by naming itself as beneficiary), CREATE/CREATE2 redeploy-after-destroy scenarios, and state/access-list expectations that involve destroyed accounts. Ordinary SELFDESTRUCT cases on pre-existing contracts that only send ETH are mostly unaffected in the baseline. This is localized rework in several families, which is level 2. |
Confidence: Medium Uncertainty: How much rework is needed depends on the unresolved halting semantics and on how target==self is handled. If SENDALL did not halt, rework would spread across ordinary SELFDESTRUCT tests (level 3). |
| Cross-EIP interactions | 2 | Coordinated cases with CREATE2 are needed: a contract created with CREATE2, then SENDALL, then redeployed with CREATE2 at the same address now hits an address collision because code and nonce persist. Cases are also needed for SELFDESTRUCT inside CREATE/CREATE2 initcode. EIP-20 is only cited as an application example, so it does not qualify as an interaction. |
Confidence: Medium Uncertainty: CREATE2 and the collision rule are not given as EIP numbers in the supplied documents. Interactions with the baseline SELFDESTRUCT restriction and block-level access lists are inferred from general knowledge of the baseline. |
| Unspecified behavior requiring cross-client consensus | 2 | Several local outcomes have competing readings. The recipient is the caller in the Abstract but the target in the Specification. The EIP does not say whether execution halts after SENDALL. It also does not say what happens when target==self, where the baseline same-transaction case burns ETH. Expected test results cannot be fixed until these are agreed, which is level 2. |
Confidence: Medium Uncertainty: Most readers would likely take the Specification ('target') and keep halting semantics, but the text does not say so. |
| Security risksUnder-specified | 1 | The changed security conditions can be checked locally. Tests need to show that a contract stays callable after SENDALL, that code and storage persist, and that redeploying at the same address collides. No cross-component trust invariant changes, so this is level 1. |
Confidence: Medium Uncertainty: If SENDALL does not halt, new re-entrancy and continuation behaviors would appear, which could raise this to level 2. |
| Edge/boundary conditionsUnder-specified | 1 | One changed mechanism, the SENDALL semantics, has boundary-sensitive outcomes: same-transaction creation versus a pre-existing account, beneficiary equal to self, zero balance, and initcode context. These are all parts of one rule, which is level 1. |
Confidence: Medium Uncertainty: If halting semantics or the target==self outcome were settled as separate rules, this could count as multiple mechanisms (level 2). |
Show 22 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | Replacing an existing instruction's semantics is scored under Modified opcodes. |
|
| Added precompiles | 0 | No precompile is introduced. |
|
| Modified precompiles | 0 | No precompile changes. |
|
| Added system contracts | 0 | No system contract is added. |
|
| Modified system contracts | 0 | No system contract's rules change. |
|
| EVM Gas rule changesUnder-specified | 0 | In the Amsterdam baseline, SELFDESTRUCT already gives no gas refund (general protocol knowledge about the base fork), so removing the refunds changes nothing there. The EIP changes no opcode cost, charging rule or limit, which fits level 0. |
Uncertainty: The spec does not say whether SENDALL still halts execution. If execution continued after it, the gas results of baseline sequences would change (level 1). The spec also does not restate the gas schedule of the renamed opcode. |
| State-access ordering within opcode execution | 0 | The opcode touches the same accounts as before, and the EIP does not change the order of its state accesses or gas charges. This is level 0. |
Uncertainty: Account deletion in same-transaction-created contracts no longer happens, which may change which state writes a block-level access list records. The EIP says nothing about this. |
| Blob gas accounting changes | 0 | The EIP does not change blob-gas accounting. |
|
| State gas accounting changes | 0 | The EIP adds no state-gas charging and changes no state-gas parameters. |
|
| New EVM gas refund | 0 | Removing a refund belongs under the gas criterion, not here. The EIP adds no refund mechanism. |
|
| New transaction types | 0 | No new transaction envelope. |
|
| New or modified transaction validity mechanisms | 0 | Transaction validity does not change. |
|
| New block / header fields | 0 | No header member is added. |
|
| Encoding changes (RLP/SSZ) | 0 | No codec or schema changes. |
|
| Block syncing changes | 0 | Only execution rules change. |
|
| New fork activation mechanism | 0 | The fork only selects new rules. No one-time state transition is needed. |
|
| Engine API changes | 0 | The Engine API contract does not change. |
|
| Transition-tool interface changes | 0 | No change to the transition tool's interface is needed. |
|
| New invariant on pre-existing tests | 0 | Baseline tests need no new kind of assertion. |
|
| New test-framework primitives | 0 | Existing abstractions are enough to express the tests. |
|
| Performance risks | 0 | No new or larger workload needs performance validation. |
|
| Cryptography | 0 | No cryptographic mechanism changes. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@6dac5e7491EIPS/eip-4758.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-4758.yaml· sha256d211e8062d90 - Supporting documents supplied with the EIP
supporting/eip-20.md