Evaluated on: · Spec revision: 2026-10-07 · 6dac5e7491 · EIP-8081 list: PFI
Scope at the cutoff. EIP-8148 adds an EIP-7685 execution-layer request type, SET_SWEEP_THRESHOLD_REQUEST_TYPE = 0x05. It is backed by a new stateful predeploy contract at an address still marked TBD. The contract follows the EIP-7002 pattern: a 56-byte add path (pubkey plus a big-endian uint64 threshold), a fee getter with an exponential fee and an inhibitor, and an end-of-block SYSTEM_ADDRESS call. That call dequeues up to 16 requests, updates the excess, resets the count and returns concatenated 76-byte SSZ ValidatorSetSweepThresholdRequest records for the requests list and requests_hash. One difference from EIP-7002: a system call with non-empty calldata disables the queue by setting the inhibitor. The rest of the feature is consensus-layer work: per-validator sweep thresholds, credential-encoded initial thresholds, effective-balance caps and changes to sweep withdrawals.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 8 criteria affected
- Plausible range
- 14–25 (Medium–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
- Encoding changes (RLP/SSZ)3
- Added system contracts2
- New invariant on pre-existing tests2
- Edge/boundary conditions2
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 predeploy address, deployment transaction and sender are TBD, so the deployed initial storage (presumably excess = EXCESS_INHIBITOR) is only implied. The pseudocode omits the little-endian conversion of the threshold that the note and the bytecode imply. The inhibitor handling differs slightly between pseudocode and bytecode, though not observably. Engine API changes and the order of the new system call relative to other request system calls are not stated.
Plausible total
14–25
recorded score 19 · plausible tiers Medium, High
Affected criteria (8)
Unresolved questions at the cutoff (4)
- What are the predeploy address and the deployment transaction, and does deployment initialise slot 0 to EXCESS_INHIBITOR?
- Is the threshold output by the contract little-endian, as the note and bytecode imply, or does the pseudocode, which has no conversion, govern?
- Does the Engine API need a new method version, or new validation of request types, to accept type 0x05?
- In what order does the new end-of-block system call run relative to the EIP-7002 and EIP-7251 system calls?
Notable ambiguities noted by the assessor (5)
- The add-path pseudocode stores `validator_pubkey[32:48] ++ threshold` without uint64_to_little_endian, unlike EIP-7002. The dequeue pseudocode reads `[16:24]` directly. The note and the bytecode's mstore8 byte reversal indicate little-endian output.
- When the inhibitor is set, the bytecode forces new_excess to 0 regardless of count, while the pseudocode resets previous_excess to 0 and then applies the count. These match only because adds revert while the inhibitor is active.
- The queue-disable path (system call with non-empty calldata) is unreachable under this EIP but present in the bytecode. Tests may need to confirm that only SYSTEM_ADDRESS can reach it.
- Request type 0x05 is assigned without the supplied documents defining types 0x03 and 0x04 in the baseline.
- The Deployment section is entirely TBD.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Encoding changes (RLP/SSZ) | 3 | A new execution-request payload schema within the existing EIP-7685 scheme meets level 3. |
Confidence: High |
| Added system contracts | 2 | Exactly one contract is introduced, and it is both stateful and triggers a system action. |
Confidence: High |
| New invariant on pre-existing testsUnder-specified | 2 | In the target fork, every block-based test now produces a new protocol-mandated storage write, and its post-state and requests output must reflect it. This is universal within the fork, but pre-fork vectors do not need re-deriving, so it is level 2. |
Confidence: Medium Uncertainty: If the predeploy is handled purely by fork pre-allocation and filled state roots, this could be seen as level 1. |
| Edge/boundary conditions | 2 | Several independent boundary-sensitive mechanisms are introduced: input length, fee and inhibitor, per-block dequeue maximum and queue reset, excess target, and the fee getter rejecting value. None needs an elevated, non-separable matrix beyond multi-block queue and fee sequences. |
Confidence: Medium |
| Cross-EIP interactionsUnder-specified | 2 | Coordinated cases are needed for blocks combining sweep-threshold requests with withdrawal (EIP-7002) and consolidation (EIP-7251) requests, checking EIP-7685 type ordering and requests_hash composition. The new system call runs alongside the existing request system calls. The EIP-7825 and EIP-1559 interactions only need local checks. This fits coordinated cases without restructuring shared vectors. |
Confidence: Medium Uncertainty: Multi-type request blocks could be read as coupling several EIPs at once, which would give level 3. Interacting EIPs: EIP-7685, EIP-7002, EIP-7251, EIP-7825, EIP-1559 |
| Block syncing changesUnder-specified | 1 | Block import validation of requests_hash must include the new type, and blocks are invalid when the new contract is missing or fails. These follow the inherited pattern and are mostly execution-derived rather than structural RLP rules, so level 1 is the best fit. |
Confidence: Low Uncertainty: Treating the state-dependent invalidation rules as complex structural checks would give 2. Treating them as ordinary execution rules would give 0. |
| Engine API changesUnder-specified | 1 | The executionRequests content exchanged over the Engine API gains a new allowed type, a semantic change to one field. The text specifies no endpoint change. |
Confidence: Low Uncertainty: The Engine API specification is not supplied. A new method version or new request-type validation rules could raise this to 2. If requests are fully opaque and generic, it could be 0. |
| Transition-tool interface changesUnder-specified | 1 | The existing requests/requests_hash output of the state-transition tool gains a new type, so one field's semantics change. No new exchange mechanism is required. |
Confidence: Medium Uncertainty: No transition-tool documentation is supplied. If the requests output is fully generic, this may be 0. |
| Patterns affecting pre-existing testsUnder-specified | 1 | Baseline requests_hash values are unchanged when no sweep requests occur, so baseline vectors need little rework. The required predeploy pre-state can be handled through fork pre-allocation. Rework is localized: request-list and type-ordering cases, plus any baseline case that relies on 0x05 being an unused type or on an exact post-state allocation. |
Confidence: Medium Uncertainty: The packet does not say whether baseline Engine API or request tests treat type 0x05 as unknown or invalid. Whether adding the predeploy to genesis counts as rework depends on the framework. |
| New test-framework primitivesUnder-specified | 1 | The framework needs a local extension: a new request-type model and helper alongside the existing withdrawal and consolidation request primitives. No new shared abstraction is needed. |
Confidence: Medium Uncertainty: Expected-request generation for the queue and fee may need a generic system-contract abstraction if one does not already exist. This is not evidenced either way. |
| Security risks | 1 | The new security conditions can be checked locally: fee-based rate limiting, the system-only dequeue and disable paths, recording msg.sender as source_address, and invalidation on missing code or a failed call. Validating source_address against credentials is CL work. |
Confidence: Medium |
| Performance risks | 1 | An extra bounded end-of-block system call (at most 16 dequeues, 3 slots each) can be covered by component benchmarks. Baseline end-to-end assumptions do not change. |
Confidence: Medium |
| Unspecified behavior requiring cross-client consensusUnder-specified | 1 | These are localized omissions: TBD address and deployment, endianness wording, and small pseudocode/bytecode differences. The note and bytecode support one intended outcome for each. The order of the new end-of-block system call relative to the others is not stated, but appears unobservable in state. |
Confidence: Medium Uncertainty: The TBD address and deployment block fixing concrete expected results. If treated as unresolved outcomes, the score could be 2. |
Show 15 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | No new instruction. |
|
| Modified opcodes | 0 | No instruction semantics or availability change. |
|
| Added precompiles | 0 | No new precompile. |
|
| Modified precompiles | 0 | No precompile changes. |
|
| Modified system contracts | 0 | No existing system contract's rules, code, storage or surrounding protocol behaviour is changed. |
Uncertainty: The order of the new end-of-block system call relative to existing ones is not stated, but it does not alter those contracts. |
| EVM Gas rule changes | 0 | No execution-gas charging or metering rule changes. The request fee is an ordinary contract fee paid in value, not a gas accounting mechanism. The system-call gas rules are inherited. |
|
| State-access ordering within opcode execution | 0 | No instruction's state-access or gas-charge ordering changes, and no new state-accessing operation is introduced. |
|
| Blob gas accounting changes | 0 | No blob-gas accounting changes. |
|
| State gas accounting changes | 0 | No state-gas accounting mechanism or parameter is changed. The contract only uses existing state-writing operations. |
|
| New EVM gas refund | 0 | No new protocol refund mechanism. |
|
| New transaction types | 0 | No new EIP-2718 transaction type. |
|
| New or modified transaction validity mechanisms | 0 | No consensus transaction-validity or intrinsic-gas rule changes. |
|
| New block / header fields | 0 | An additional request type under the existing requests_hash is not a new header field. |
|
| New fork activation mechanism | 0 | No protocol-mandated activation-time state migration or code installation is specified. The inhibitor clearing is contract-internal logic inside the recurring call. |
Uncertainty: The deployment transaction and address are TBD. If they were later replaced by protocol-mandated installation, this would become level 3. |
| Cryptography | 0 | No cryptographic mechanism is added or changed on the EL. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@6dac5e7491EIPS/eip-8148.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-8148.yaml· sha256bd7a7b5ae17a - Supporting documents supplied with the EIP
supporting/eip-1559.md,supporting/eip-7002.md,supporting/eip-7251.md,supporting/eip-7685.md,supporting/eip-7825.md