Evaluated on: · Spec revision: 2023-10-12 · 46d979f902
Scope at the cutoff. EIP-6110 (revision 46d979f9, Draft) adds a list of validator deposit operations to the EL block body and a new `deposits_root` header field, the trie root over that list. Starting at FORK_BLOCK, which is selected by timestamp, a block is valid only if its `deposits_root` matches the body list. The body list must also equal the deposits parsed, in transaction order, from logs that the configured DEPOSIT_CONTRACT_ADDRESS emits in the block's receipts. On the CL side, the supporting specs add a `deposit_receipts` field to `ExecutionPayload`/`ExecutionPayloadHeader` (capped at 8,192). They also add a `deposit_receipts_start_index` value that drives the transition away from Eth1Data voting. The EIP adds no gas, opcode, precompile or transaction-type changes.
- Evaluator
- LLMChecklist v3
- Confidence
- Medium
- Under-specified at assessment cutoff
- Yes — 4 criteria affected
- Plausible range
- 23–29 (High)
- Assessment cutoff
- 2024-01-18 · EIP revision
46d979f902(2023-10-12)
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 details are left open: the Engine API exchange is not specified in the supplied documents; the deposit log parser is a stub; the deposits trie key encoding and the exact header field position are implied, not stated; and handling of malformed logs from the deposit address is not addressed.
Plausible total
23–29
recorded score 26 · plausible tiers High
Unresolved questions at the cutoff (4)
- Which Engine API methods or versions carry the deposits list, and is a list exceeding the CL limit of 8,192 rejected by the EL?
- How should a log from DEPOSIT_CONTRACT_ADDRESS whose data does not decode as a DepositEvent be handled: invalid block, skip, or other?
- Is the trie key RLP(index) with value rlp_encoded_deposit, matching the transaction and withdrawal tries?
- Where exactly does deposits_root sit in the header field order relative to the Cancun fields?
Notable ambiguities noted by the assessor (4)
- The EIP says the deposits list is unbounded, but the CL payload caps deposit_receipts at 8,192.
- Naming is inconsistent: the EL uses deposits/deposits_root, the CL uses deposit_receipts/deposit_receipts_root.
- parse_deposit_data is left unimplemented (pass).
- Logs are filtered only by address, which relies on the deployed contract's code; a custom contract at that address on a test network is undefined territory.
Criterion breakdown
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| New block / header fields | 3 | Adds a new EL header member (deposits_root) and a new block-level body member (deposits). |
Confidence: High |
| Encoding changes (RLP/SSZ) | 3 | Block body, header and Deposit object schemas change, plus the payload schema. |
Confidence: High |
| Block syncing changes | 3 | Multiple rules change. One is complex: the deposits list must match logs produced by executing the block. The others are the RLP structure change and the root check. |
Confidence: High |
| Engine API changesUnder-specified | 2 | One semantic field (the deposit receipts list) is added to the payload exchanged over the Engine API. Adding a payload field conventionally needs new versioned newPayload/getPayload methods, giving one field change plus endpoint-level versioning. |
Confidence: Low Uncertainty: No Engine API spec is supplied. The method versioning and any extra fields (for example, a deposits root in responses) are inferred. |
| Transition-tool interface changesUnder-specified | 2 | Several output or configuration fields are needed: the deposits list, deposits_root, and possibly the deposit contract address. Extracting deposits from logs is internal to the tool and does not change the exchange protocol, so this is multiple fields without a new mechanism. |
Confidence: Medium Uncertainty: No transition-tool interface document is supplied. The exact fields are inferred from what the EL must compute. |
| New invariant on pre-existing tests | 2 | Every target-fork blockchain test must produce and check the new deposits_root value and the deposits body list. The rubric caps a universal assertion without re-derived pre-fork vectors at level 2, and pre-fork vectors are unaffected. |
Confidence: High |
| New test-framework primitives | 2 | The test suite needs a Deposit representation, a deposits list and root in block construction, a way to generate expected deposits from deposit-contract transactions, and modifiers that tamper with the deposits list or root. These are new construction and expectation abstractions inside the target suite. They do not change how other behavioural families are checked. |
Confidence: Medium |
| Security risks | 2 | The CL's trust in deposits now depends on the EL rejecting blocks whose deposits do not match the executed logs. That changes the EL–CL security boundary and needs targeted adversarial cases: forged, missing, reordered or extra deposits, and logs from reverted transactions. |
Confidence: Medium |
| Edge/boundary conditionsUnder-specified | 2 | There are several independent boundary-sensitive rules: the fork-timestamp switch, list size (zero, one, many, and the CL payload cap), and the uint64 little-endian parsing of amount and index. No combination of dimensions changes outcomes in a way that rises to an elevated matrix. |
Confidence: Medium Uncertainty: Whether the 8,192 cap is an EL-tested boundary depends on Engine API handling, which is not specified. |
| Modified system contracts | 1 | The contract's code and rules are unchanged. Its log output convention becomes protocol-interpreted and consensus-binding, which is one indirect output-convention change. |
Confidence: Medium Uncertainty: One could argue this is level 2, because the EL now relies on assumptions about the contract's code (it emits only DepositEvent). |
| Patterns affecting pre-existing tests | 1 | Behavioural rework is limited to baseline cases that emit logs from DEPOSIT_CONTRACT_ADDRESS. Their expected block bodies or validity change. Ordinary cases only gain the new header field (covered under INV and HDR), not changed inputs or results. |
Confidence: Medium Uncertainty: How much rework is needed depends on whether baseline test genesis places code at the deposit contract address. |
| Performance risks | 1 | The EL workload of scanning logs, building the deposits list and computing its trie root is bounded by gas. Component benchmarks of maximum-deposit blocks suffice. The heavier signature-verification cost is on the CL. |
Confidence: Medium |
| Cross-EIP interactions | 1 | Interactions are limited to local compatibility checks: field ordering and encoding after the existing withdrawals body field and the Cancun header fields. EIP-4881 is a CL-only interface and needs no EL coordinated cases. |
Confidence: Medium Interacting EIPs: EIP-4881 |
| Unspecified behavior requiring cross-client consensusUnder-specified | 1 | Some local details are omitted: the parser, the trie key encoding, and where the field is appended. The surrounding conventions and the canonical contract each point to one intended outcome. |
Confidence: Medium Uncertainty: If test networks place other code at the configured address, handling malformed or non-DepositEvent logs has competing outcomes (invalid block vs. skip), which would raise this to 2. |
Show 14 zero-score criteria
| Criterion | Score | Why this score | Evidence / uncertainty |
|---|---|---|---|
| Added opcodes | 0 | None. |
|
| Modified opcodes | 0 | No instruction semantics change. |
|
| Added precompiles | 0 | None. |
|
| Modified precompiles | 0 | None. |
|
| Added system contracts | 0 | No new protocol-designated contract is introduced. |
|
| EVM Gas rule changes | 0 | No execution-gas accounting rule or parameter changes. Deposits come from ordinary contract calls under unchanged gas rules. |
|
| State-access ordering within opcode execution | 0 | Deposit extraction happens after execution, from receipts. No opcode ordering changes. |
|
| Blob gas accounting changes | 0 | No blob-gas rules change. |
|
| State gas accounting changes | 0 | No state-gas accounting is introduced or changed. |
|
| 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 transaction-validity changes. |
|
| New fork activation mechanism | 0 | No one-time EL state migration or code installation is required. |
|
| Cryptography | 0 | The EL reuses the unchanged MPT/keccak commitment. Signature verification stays on the CL. |
|
Assessment provenance
- Assessed EIP revision
ethereum/EIPs@46d979f902EIPS/eip-6110.md committed 2023-10-12 · information cutoff 2024-01-18- 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/prague/eip-6110.yaml· sha25650074ba96289 - Supporting documents supplied with the EIP
supporting/eip-4881.md,supporting/ethereum-consensus-specs--specs-_features-eip6110-beacon-chain.md,supporting/ethereum-consensus-specs--specs-_features-eip6110-validator.md,supporting/ethereum-consensus-specs--specs-_features-eip6110-fork.md