Retrospective LLM-Based Complexity Evaluations

EIP complexity assessment

EIP-7928: Block-Level Access Lists

Assessed in Amsterdam / Glamsterdam. The score describes the EIP text available at the assessment cutoff, not the EIP as it stands today.

RetrospectiveAmsterdam / GlamsterdamAssessment cutoff 2025-07-31Included by cutoffLayers: execution
LLM Completescore 40
Human Completescore 29 · Checklist revision 1· merged checklist

Evaluated on: · Spec revision: 2025-07-31 · 59be937534

Scope at the cutoff. At the information cutoff, this draft introduced a consensus-enforced Block-Level Access List in the block body and a new header commitment, with an ordered SSZ structure covering accessed accounts, storage reads, and per-transaction storage, balance, nonce, and code changes. Clients were required to gather accesses and changes during execution, system processing, and withdrawals, then reject a block whose committed BAL was incomplete, spurious, or inaccurate. The stated goals were parallel I/O and transaction validation, plus state reconstruction without transaction execution.

40HighHigh
Evaluator
LLMChecklist v2
Confidence
Medium
Under-specified at assessment cutoff
Yes — 9 criteria affected
Plausible range
37–41 (High)
Assessment cutoff
2025-07-31 · EIP revision 59be937534 (2025-07-31)
Score bands · Checklist revision 2
  • 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

  1. Cross-EIP interactions4
  2. New block / header fields3
  3. Encoding changes (RLP/SSZ)3
  4. Block syncing changes3

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 draft establishes exact BAL validity without fully specifying how every execution path maps into the list, how the SSZ object is committed and embedded in the RLP body, or how system and withdrawal effects are ordered and indexed. It also omits transition-tool and Engine API representations and contains an EIP-7702 hyperlink that resolves to the packaged EIP-7792. These are material because distinct client choices can produce different bal_hash values for the same execution.

Unresolved questions at the cutoff (6)
  • What exact SSZ serialization or tree root does compute_bal_hash use, is compression consensus-visible, and where are the opaque BAL bytes placed in the RLP block body?
  • Do failed, reverted, out-of-gas, or declared-but-unused EIP-2930 accesses remain in the BAL, and at what exact point does each state-accessing operation become recordable?
  • Are EIP-7002 and EIP-7251 processed only after transactions, are EIP-2935 and EIP-4788 processed only before them, and why does the generic pseudocode process all four in both calls?
  • Do system effects use transaction_count or transaction_count + 1, and how are they distinguished from withdrawals that also use transaction_count in the pseudocode?
  • Which new fields are inputs or outputs of transition-tool and Engine API interfaces, and which component derives bal_hash?
  • Does the authority nonce rule intend EIP-7702 as written, or EIP-7792 as linked, whose packaged text instead specifies verifiable logs?
Notable ambiguities noted by the assessor (5)
  • The normative source defines bal_hash only as Hash32 and calls compute_bal_hash without specifying the commitment derivation.
  • The prose assigns system-contract effects transaction_count + 1, while the pseudocode uses transaction_count and also assigns that value to withdrawals.
  • The two process_system_contracts calls are described as covering different EIP sets, but the single function body tracks all four named system mechanisms on either call.
  • The text names EIP-7702 authorities but links to eip-7792.md; the packaged EIP-7792 concerns verifiable logs and supplies no authority definition.
  • Storage reads include the phrase "slots in pre-state but not written," which does not state whether access is required and conflicts with the surrounding access-based definition if read literally.

Criterion breakdown

EIP-7928 Amsterdam / Glamsterdam: LLM criterion scores and rationale
CriterionScoreWhy this scoreEvidence / uncertainty
Cross-EIP interactionsUnder-specifiedExceptional4The BAL has strong, test-relevant interdependencies with seven identified EIPs: 2929, 2930, 7702, 7002, 7251, 2935, and 4788. Access-set initialization and per-opcode tracking, authority nonce changes, and four system-transition paths each need coordinated expected BAL cases. A base score of 3 plus one increment for four additional EIPs beyond the first three yields 4.

Exceptional score: Cross-EIP interactions is explicitly uncapped. Seven identified interacting EIPs leave four beyond the first three, which triggers one rubric-defined +1 increment and produces score 4.

  • eip.md · Motivation and Specification, lines 17-20, 159-177, and 417-419 The proposal contrasts EIP-2930 lists, relies on EIP-2929 access gathering, records EIP-7702 authority nonces, and incorporates effects attributed to EIPs 7002, 7251, 2935, and 4788.
  • supporting/eip-2930.md · Abstract and Specification, lines 17-21 and 75-104 EIP-2930 populates the EIP-2929 accessed sets before execution, creating a coordinated question about whether declared-but-unused items belong in the BAL.
  • supporting/eip-7792.md · Front matter and Abstract, lines 1-16 The packaged target of the draft's EIP-7702 hyperlink is actually EIP-7792, Verifiable logs, exposing a historical cross-reference ambiguity rather than establishing a verifiable-logs interaction.
Confidence: Medium
Uncertainty: The authority reference names EIP-7702 but links to the packaged EIP-7792; 7702 is retained because it is the number stated in the normative sentence, while 7792 is not counted as an interaction. Some system EIP timing is contradictory.
Interacting EIPs: EIP-2929, EIP-2930, EIP-7702, EIP-7002, EIP-7251, EIP-2935, EIP-4788
New block / header fields3The binary rubric anchor assigns score 3 for any new block or header field.
  • eip.md · Specification / Block Structure Modification, lines 29-41 The Header class is explicitly extended with a new Hash32 bal_hash field, and the body carries the corresponding BAL.
Confidence: High
Encoding changes (RLP/SSZ)Under-specified3The rubric assigns score 3 whenever encoding changes are introduced at block level; this proposal does so directly.
  • eip.md · Specification / Block Structure Modification and SSZ Data Structures, lines 29-119 A new header field and an SSZ-encoded nested BlockAccessList are added at block level.
  • eip.md · Rationale / BAL Design Choice, lines 425-437 The design explicitly embeds the SSZ BAL as opaque bytes in the RLP block.
Confidence: High
Uncertainty: The exact SSZ commitment and RLP placement are missing, but the existence of a block-level encoding change is unambiguous.
Block syncing changesUnder-specified3Sync validation must handle multiple related mechanisms: the changed header/body RLP shape, nested SSZ decoding and limits, commitment matching, and full semantic validation. At least one is complex, meeting score 3.
  • eip.md · Specification / Block Structure Modification, lines 29-45 The block header gains bal_hash and the block body gains a BlockAccessList.
  • eip.md · Rationale / BAL Design Choice and Backwards Compatibility, lines 431-437 and 459-461 The SSZ BAL is embedded as opaque bytes in the RLP block, supports executionless state reconstruction, and is a non-backward-compatible block-structure change.
Confidence: Medium
Uncertainty: The exact RLP body placement and hash derivation are absent, so some validation cases cannot yet be baselined.
Patterns affecting pre-existing tests3Existing post-fork block and execution scenarios across diverse opcode, transaction, system-action, and sync categories must be reworked to carry a correctly derived BAL and commitment. This is a major, diverse subset rather than a narrow contrived class.
  • eip.md · Specification / Block Structure Modification, lines 29-45 Every post-fork block gains a header commitment and a body-level BlockAccessList.
  • eip.md · Specification / State Transition Function, lines 417-419 Any missing or spurious BAL entry invalidates the block, and clients must compare the supplied list with execution-gathered accesses.
Confidence: High
Uncertainty: The draft does not describe a test migration plan, but the fork-wide block-validity consequence is explicit.
New invariant on pre-existing tests3Regardless of what an execution test principally exercises, every test instantiated at the fork must additionally satisfy and check the BAL commitment and exact-content invariant. Existing scenarios carried into the fork therefore require mechanically re-derived BAL data.
  • eip.md · Specification / State Transition Function, lines 295-299 and 417-419 A computed BAL must match the new header commitment, and completeness and absence of spurious entries are mandatory block-validity conditions.
Confidence: High
New test-framework primitives3Because every post-fork block needs this artifact, BAL derivation, encoding, commitment, and invalid-entry expectations must be framework-level primitives used by unrelated EIP tests, not helpers confined to EIP-7928's own cases.
  • eip.md · Specification / SSZ Data Structures and State Transition Function, lines 43-119 and 295-299 Tests need to construct a nested ordered SSZ BAL, derive its commitment, and compare it with execution-collected accesses.
  • eip.md · Specification / State Transition Function, lines 417-419 Missing and spurious entries are consensus-invalid, requiring reusable exact-BAL expectations and mutation support.
Confidence: Medium
Uncertainty: The historical package contains no test-framework design, so the exact primitive split remains an implementation choice.
Security risks3Incorrect implementation can affect consensus validity and state reconstruction, and the mechanism spans critical execution, state, serialization, sync, and networking components. Those altered assumptions require extensive security review and fuzzing, matching score 3.
  • eip.md · Specification / State Transition Function, lines 295-299 and 417-421 Consensus acceptance depends on exact equality between an untrusted block commitment and execution-gathered accesses, with missing or spurious entries invalidating the block.
  • eip.md · Abstract and Security Considerations, lines 13-15 and 463-471 The BAL is also intended to enable executionless state updates, while the draft acknowledges validation and propagation overhead.
Confidence: High
Uncertainty: The draft's security section does not analyze malformed encodings, commitment ambiguity, or access-tracking disagreement in detail.
Performance risks3Full-block access instrumentation, sorting, SSZ construction, hashing, propagation, and parallel scheduling cannot be validated wholly in isolation and interact with existing execution, database, sync, and networking performance. The expected impact on established benchmarks is substantial, satisfying score 3.
  • eip.md · Abstract and Motivation, lines 13-25 The mechanism is intended to reshape disk reads, transaction validation, and EVM execution through parallelism.
  • eip.md · Rationale / Block Size Considerations and Asynchronous Validation, lines 439-457 The draft reports about 40 KiB average compressed overhead, a 0.93 MiB worst case at 36m gas, and concurrent BAL verification with I/O and EVM work.
  • eip.md · Security Considerations, lines 463-471 Validation overhead and increased propagation size are acknowledged explicitly.
Confidence: High
Uncertainty: The cited size analysis is summarized but its linked asset is not in the sealed package.
Edge/boundary conditionsUnder-specified3Multiple boundary-prone mechanisms interact, and exact-list validity requires an elevated matrix over state value transitions, transaction ordering, reverts or halts, system actions, and maximum lengths. This satisfies score 3.
  • eip.md · Specification, lines 128-177 The BAL distinguishes changed, zeroed, unchanged, read-only, and read-write slots and enumerates SELFDESTRUCT, zero-value, exceptional-halt, withdrawal, and system-contract cases.
  • eip.md · Specification / SSZ Data Structures, lines 47-118 Nested lists have several independent maxima and ordering requirements, with transaction indices and multiple state-field change lists.
Confidence: High
Uncertainty: Several boundary outcomes are unresolved in the draft, especially non-transaction indices and reverted or failed accesses.
Unspecified behavior requiring cross-client consensusUnder-specified3EIP-7928 turns the previously non-committed exact set and timing of accesses into consensus-critical block data, yet constructible failure, revert, preload, system-action, indexing, and commitment cases do not have a unique answer. This is the score-3 case of previously unobservable behavior becoming consensus-critical and requiring repeated cross-client re-baselining as the draft is clarified.
  • eip.md · Specification, lines 121-177 and 417-419 The draft demands a complete and exact list of every access while describing categories and selected edge cases rather than a complete per-operation observation rule.
  • eip.md · Specification / State Transition Function, lines 271-299 and 376-414 Illustrative pseudocode leaves compute_bal_hash undefined, processes system contracts in apparently conflicting phases, and assigns non-transaction effects an index inconsistently with the prose.
  • supporting/eip-2929.md · Specification, lines 47-49 and 65-74 The referenced access sets have revert and precise in-opcode timing semantics, making the exact mapping from attempted execution to persistent BAL entries observable at gas, failure, and revert boundaries.
Confidence: High
Uncertainty: Material gaps include commitment derivation, RLP placement, failed or reverted accesses, EIP-2930 preloads, system-action ordering and indices, and the mismatched EIP-7702/EIP-7792 reference.
Modified system contractsUnder-specified2The proposal does not alter those contracts' code or underlying state-transition rules, but it gives the outputs of multiple system-contract actions a major new indirect effect on block validity. That matches score 2 rather than the direct-modification anchor at 3.
  • eip.md · Specification / Important Implementation Details, lines 173-177 Storage effects of EIP-7002, EIP-7251, EIP-2935, and EIP-4788 system processing must be represented in the BAL.
  • eip.md · Specification / State Transition Function, lines 376-404 The pseudocode adds tracking around several existing system contracts and records their storage writes under a block-level index.
Confidence: Medium
Uncertainty: The pseudocode is internally unclear about which contracts run before or after transactions and withdrawals and about their assigned index.
Engine API changesUnder-specified2Payload construction and validation must convey the new commitment and BAL data across the execution-payload interface, implying multiple Engine API fields or equivalent versioned representations. The draft does not propose a new endpoint, so score 3 is not supported.
  • eip.md · Specification / Block Structure Modification, lines 29-45 The execution block acquires two distinct protocol data elements, bal_hash in the header and the BlockAccessList in the body.
Confidence: Low
Uncertainty: No Engine API directive or field ownership is specified. Depending on whether one side derives bal_hash, the eventual interface could require only one new field and score 1.
Transition-tool interface changesUnder-specified2Even though the draft does not name a transition-tool schema, the tool must represent the BAL validation mechanism and its new block data. That establishes at least the score-2 anchor for a new interface mechanism; the exact multiplicity of fields is not specified well enough to select 3.
  • eip.md · Specification / Block Structure Modification and State Transition Function, lines 29-45 and 271-299 The transition consumes a new body-level BAL and header commitment and must execute a new access-collection and commitment-comparison mechanism.
Confidence: Medium
Uncertainty: The input/output ownership of bal_hash, the encoded BAL, and any computed BAL artifact is not defined; a fully specified interface could warrant score 3.
Show 14 zero-score criteria
Zero-score criteria (Checklist revision 2)
CriterionScoreWhy this scoreEvidence / uncertainty
Added opcodes0No opcode is introduced.
  • eip.md · Specification, lines 121-170 Existing opcodes such as SLOAD, SSTORE, BALANCE, STATICCALL, CREATE, and SELFDESTRUCT are discussed only as sources of accesses or changes.
Modified opcodes0BAL observability does not modify an opcode's result or non-gas behavior under this anchor.
  • eip.md · Specification, lines 121-170 The proposal records effects of existing opcodes without changing their stack behavior, returned values, state-transition results, or deprecating them.
Added precompiles0No precompile is introduced.
  • eip.md · Specification / SSZ Data Structures and Important Implementation Details, lines 43-177 The complete data-model and edge-case specification adds no precompile address, input format, or execution rule.
Modified precompiles0No existing precompile behavior or gas accounting is modified.
  • eip.md · Specification / State Transition Function, lines 271-336 Generic execution access tracking is added, but no precompile logic or gas schedule is changed.
Added system contracts0No system contract is added by EIP-7928.
  • eip.md · Specification / Important Implementation Details, lines 173-177 The proposal records effects caused by already-referenced system contracts but does not introduce a contract, address, code deployment, or new system action of its own.
EVM Gas rule changes0The BAL is an observation and block-validation mechanism. It neither adjusts an existing EVM gas rule nor introduces a new one, so the zero anchor applies.
  • eip.md · Specification / State Transition Function, lines 271-336 The transition pseudocode executes transactions and observes their accesses and state changes, but introduces no gas charge or gas-accounting rule.
State-access ordering within opcode executionUnder-specified0EIP-7928 makes the gathered accesses consensus-observable but does not itself change where an opcode accesses state or where gas is charged relative to that access. The rubric directs that observability alone is not scored here.
  • eip.md · Specification / State Transition Function, lines 417-421 Clients compare execution-gathered accesses, expressly referring to the pre-existing EIP-2929 access mechanism; no opcode's access or charge point is moved.
  • supporting/eip-2929.md · Specification / Storage read changes, lines 60-71 The supporting EIP already fixes when account and storage access charges and accessed-set updates occur inside affected opcodes.
Uncertainty: The draft does not fully map every exceptional execution path to a BAL entry; that missing consensus definition is scored under unspecified behavior, not as an ordering change.
Blob gas accounting changes0No blob gas accounting mechanism is changed or introduced.
  • eip.md · Specification / SSZ Data Structures, lines 43-119 The new structures contain account and state-access data and specify no blob-gas fields, prices, or accounting behavior.
State gas accounting changes0Recording state diffs is not a state-gas charging rule, so none of the state-gas anchors is triggered.
  • eip.md · Specification, lines 121-159 The proposal records storage, balance, nonce, and code accesses or changes, but assigns no state-gas costs, budget, reservoir, or spill behavior to them.
New EVM gas refund0No refund is created or modified; the proposal only observes a balance after ordinary refund processing.
  • eip.md · Specification / Important Implementation Details, lines 163-172 Gas refunds are mentioned only to require recording the sender's final balance after each transaction.
New transaction types0No transaction type is introduced.
  • eip.md · Specification / Block Structure Modification, lines 29-45 The new data is attached to the block header and body, not to a new transaction envelope.
New or modified transaction validity mechanisms0The EIP changes block validity, not transaction-type validity or intrinsic gas calculation.
  • eip.md · Specification / State Transition Function, lines 273-299 and 417-421 Transactions execute under their existing rules; the new assertion compares a block-level BAL after gathering their effects.
New fork activation mechanism0A schema change beginning at a fork is not the activation-block mutation scored by this anchor.
  • eip.md · Backwards Compatibility, lines 459-461 The proposal requires a hard fork because of its block-structure change but specifies no activation-block state mutation or modification of an existing internal variable.
Cryptography0Existing SSZ commitment and hash use do not introduce or modify a cryptography mechanism under this anchor.
  • eip.md · Rationale / BAL Design Choice, lines 425-437 The proposal selects SSZ for encoding and its existing Merkle-proof properties; it does not define a new cryptographic construction.
Uncertainty: The exact compute_bal_hash derivation is unspecified, but the text provides no evidence that it is novel cryptography.
Assessment provenance
Assessed EIP revision
ethereum/EIPs@59be937534 EIPS/eip-7928.md committed 2025-07-31 · information cutoff 2025-07-31T16:00:14Z
Current master · File history · blob 23900781a2 · sha256 c1973b06017a
Rubric
Checklist revision 2 · ethspecs/pm@3d8c0128c5
Evaluator
gpt-5.6-sol at xhigh reasoning effort · isolation bubblewrap_one_eip_capsule_v1
Source record
Frozen research record research/tasks/05-retrospective-complexity-assignment/outputs/fork-eips/amsterdam/eip-7928.yaml · sha256 3b2272986a04
Supporting documents in the sealed package
supporting/eip-2929.md, supporting/eip-2930.md, supporting/eip-7792.md

Evaluated on: · Spec revision: 2025-07-31 · 59be937534

Scope at the cutoff. Assessment of the sealed 2025-07-31 Draft of EIP-7928: a mandatory SSZ-encoded block-level access list committed by a new header field and validated against execution-gathered account, storage, balance, nonce, and code accesses. The assessment covers only the proposal and allowlisted historical supporting EIPs, with no implementation or outcome evidence.

26HighHigh
Evaluator
LLMChecklist v1
Confidence
Medium
Under-specified at assessment cutoff
Yes — 10 criteria affected
Plausible range
21–33 (High)
Assessment cutoff
2025-07-31 · EIP revision 59be937534 (2025-07-31)
Score bands · Checklist revision 1
  • Low <10
  • Medium 10–19
  • High ≥20

24 criteria scored 0–3 (4 in exceptional cases; cross-EIP interactions is uncapped); nominal maximum 72.

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

  1. New block / header fields3
  2. Encoding changes (RLP/SSZ)3
  3. Patterns affecting pre-existing tests3
  4. Security risks3

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: Material gaps remain in BAL commitment/hash construction, exact RLP block-body placement, transition-tool and Engine API schemas, system-operation ordering/indexing, and several canonical inclusion rules. These gaps are recorded once here and reflected only in directly affected criteria.

Unresolved questions at the cutoff (6)
  • What exact SSZ root/hash construction does compute_bal_hash use, and how is bal_hash validated and serialized in the header?
  • Where and in what exact envelope is the SSZ BAL carried in the RLP block body, including canonical empty and maximum-size encodings?
  • Which transition-tool and Engine API request/result fields and endpoint versions carry bal_hash and the BAL?
  • Do system-contract changes use transaction_count or transaction_count + 1, how are withdrawals ordered relative to them, and why are system contracts processed both before and after transactions?
  • Does the reference to EIP-7702 authorities intend a different supporting EIP than the packaged EIP-7792 Verifiable logs document?
  • How are unchanged writes, pre-state slots, reverts, repeated changes, and uint128 balance overflow handled canonically at all list limits?
Notable ambiguities noted by the assessor (5)
  • The prose assigns system-contract changes transaction index transaction_count + 1, while the pseudocode comments and calls use len(block.transactions); withdrawals also use that index.
  • process_system_contracts is called both before and after transaction execution, while its body appears to process the same EIP-7002, EIP-7251, EIP-2935, and EIP-4788 cases each time.
  • The EIP names EIP-7702 authorities but links ./eip-7792.md; the packaged EIP-7792 is Verifiable logs and contains no authority semantics.
  • The draft says storage_reads include slots in pre-state but not written, which could be read as broader than actually accessed slots and conflicts with the stated access-list scope.
  • The concrete example describes a roughly 400-500-byte compressed BAL, while the rationale states roughly 40 KiB average; these may refer to example versus historical average but are not labeled consistently.

Criterion breakdown

EIP-7928 Amsterdam / Glamsterdam: LLM criterion scores and rationale
CriterionScoreWhy this scoreEvidence / uncertainty
New block / header fields3The explicit new bal_hash header field satisfies the rubric's binary score-3 condition.
  • eip.md · Specification > Block Structure Modification The Header class is extended with bal_hash: Hash32, and the block body gains a BlockAccessList.
Confidence: High
Uncertainty: The header field's exact RLP position is not stated, but its introduction is unambiguous.
Encoding changes (RLP/SSZ)Under-specified3The proposal explicitly introduces a new block-level SSZ encoding carried within the RLP block, satisfying the binary score-3 anchor.
  • eip.md · Specification > SSZ Data Structures A nested bounded SSZ BlockAccessList encoding is defined for account, storage, balance, nonce, and code changes.
  • eip.md · Rationale > BAL Design Choice The SSZ BAL is to be embedded as opaque bytes in the RLP block.
Confidence: High
Uncertainty: The exact RLP envelope and commitment/hash construction are omitted, but the existence of a block-level encoding change is explicit.
Patterns affecting pre-existing tests3A mandatory, execution-derived validation object affects valid and invalid block construction across ordinary transfers, contract execution, withdrawals, exceptional halts, and system operations, requiring broad reworking of pre-existing block/state-transition test patterns.
  • eip.md · Specification > State Transition Function Every BAL must exactly match execution-gathered accesses and changes; missing or spurious entries invalidate the block.
  • eip.md · Backwards Compatibility The proposal changes the block structure incompatibly and requires a hard fork.
Confidence: High
Uncertainty: The package contains no test inventory, so the exact number of affected suites is not measurable; the score follows from the rule applying to every post-fork block and diverse execution categories.
Security risksUnder-specified3Incorrect access capture, canonicalization, hashing, or state-diff handling can affect consensus block acceptance and reconstructed state across execution, syncing, withdrawals, and system operations, warranting extensive review and fuzzing across critical components.
  • eip.md · Specification > State Transition Function BAL completeness and accuracy become consensus validity conditions, and post-state changes are intended to support state reconstruction without transaction execution.
  • eip.md · Security Considerations The draft identifies validation overhead needed to prevent invalid-block acceptance and block-size propagation impact.
Confidence: Medium
Uncertainty: The security section is brief and the hash/state-reconstruction algorithms are incomplete, so the full invariant set cannot be enumerated from the sealed draft.
Performance risks3Performance cannot be fully isolated because BAL construction, database access, execution scheduling, block propagation, and sync interact across the full block-processing path, with substantial effects on existing benchmarks.
  • eip.md · Motivation; Rationale > Block Size Considerations; Rationale > Asynchronous Validation The design changes disk-read and EVM scheduling, adds about 40 KiB average and up to about 0.93 MiB worst-case data in the stated analysis, and performs BAL verification alongside parallel IO and EVM operations.
  • eip.md · Security Considerations > Validation Overhead; Security Considerations > Block Size The draft acknowledges added validation overhead and propagation impact from larger blocks.
Confidence: High
Uncertainty: The cited empirical analysis is not included in the allowlist and the asynchronous-performance claim is not supported by implementation evidence, so magnitudes cannot be independently confirmed.
Edge/boundary conditions3Several interacting boundary-prone mechanisms require elevated combinatorial testing, especially revert/exception behavior, read-versus-write classification, system-operation indexing, ordering, and maximum lengths.
  • eip.md · Specification > Important Implementation Details > Edge Cases The draft enumerates SELFDESTRUCT, unchanged accesses, zero-value transfers, refunds, rewards, read-only operations, exceptional halts, withdrawals, and multiple system-contract cases.
  • eip.md · Specification > SSZ Data Structures > Ordering requirements Addresses, storage keys, and transaction indices have distinct ordering constraints, bounded list sizes, and inclusion/exclusion rules for reads and writes.
Confidence: High
Uncertainty: Some enumerated cases have inconsistent or incomplete indexing semantics, increasing test uncertainty but not requiring an exceptional score beyond the defined score-3 anchor.
Cross-EIP interactionsUnder-specified3The proposal has strong dependencies on multiple past and same-era mechanisms whose accesses and state changes must be represented canonically, requiring extensive coordinated cross-EIP vectors.
  • eip.md · Motivation; Specification > State Transition Function; Specification > Important Implementation Details > Edge Cases BAL semantics build on EIP-2929 access collection, contrast with EIP-2930 access lists, and explicitly incorporate EIP-7002, EIP-7251, EIP-2935, EIP-4788, and purported EIP-7702 authority changes.
  • supporting/eip-2929.md · Specification > Parameters; Storage read changes; SSTORE changes EIP-2929 defines the transaction-scoped accessed-address and accessed-storage-key sets whose access semantics EIP-7928 says clients must compare against the BAL.
  • supporting/eip-2930.md · Abstract; Specification EIP-2930 transaction access lists prepopulate the same EIP-2929 access sets, creating coordinated semantics with block-level collection.
Confidence: Medium
Uncertainty: The EIP-7702 text link points to the allowlisted EIP-7792 document, which is about verifiable logs rather than authorities, and the other named system EIPs are not allowlisted; exact interaction semantics therefore remain partly unresolved.
Block syncing changesUnder-specified2This is a single but complex new block-encoding and validation mechanism that sync clients must ingest, decode, commit, and validate, matching score 2.
  • eip.md · Rationale > BAL Design Choice The SSZ BAL is embedded as opaque bytes in the RLP block for compatibility and carries post-execution values intended to permit state reconstruction during sync.
  • eip.md · Specification > Block Structure Modification; Specification > State Transition Function The block gains a header commitment and body object whose completeness and hash must be validated.
Confidence: Medium
Uncertainty: The exact RLP body position, envelope, hash construction, and sync validation path are not specified, so the boundary between one and multiple RLP validation mechanisms is unclear.
Transition-tool interface changesUnder-specified2The state-transition workflow needs a new BAL validation mechanism and access to new block data, which best fits the rubric's score-2 anchor even though a concrete tool schema is absent.
  • eip.md · Specification > Block Structure Modification A new bal_hash header field and a BlockAccessList in the block body are introduced.
  • eip.md · Specification > State Transition Function The transition must gather accesses, construct the BAL, hash it, and compare it with the block commitment.
Confidence: Low
Uncertainty: The draft never specifies transition-tool request/result fields, so whether this is one field, multiple fields, or an interface-internal mechanism is unresolved.
Modified system contractsUnder-specified1No system-contract code or state-transition behavior is directly changed, but their effects now have a minor indirect requirement: canonical BAL tracking and validation.
  • eip.md · Specification > Important Implementation Details > Edge Cases Storage diffs caused by four existing system mechanisms must be represented in the BAL under a system-operation transaction index.
  • eip.md · Specification > State Transition Function > process_system_contracts BAL collection explicitly records the storage writes of the EIP-7002, EIP-7251, EIP-2935, and EIP-4788 addresses.
Confidence: Medium
Uncertainty: The text does not define whether BAL-invalidating behavior is considered a major indirect behavioral effect, and its pre/post processing pseudocode is internally ambiguous.
Show 14 zero-score criteria
Zero-score criteria (Checklist revision 1)
CriterionScoreWhy this scoreEvidence / uncertainty
Added opcodes0No new opcode is defined.
  • eip.md · Specification > SSZ Data Structures; Specification > Important Implementation Details > Edge Cases The proposal observes accesses made by existing operations such as SLOAD, SSTORE, STATICCALL, BALANCE, EXTCODEHASH, EXTCODESIZE, CREATE, and CREATE2.
Uncertainty: The complete opcode-related specification describes tracking only; no opcode number, stack signature, or new instruction appears.
Modified opcodes0The EVM results, stack behavior, and state semantics of existing opcodes are not modified; BAL recording is block-validation instrumentation rather than opcode behavior under this anchor.
  • eip.md · Specification > SSZ Data Structures; Specification > Important Implementation Details > Edge Cases Existing opcode targets and storage accesses are included in an execution-derived block record, including read-only and unchanged accesses.
Uncertainty: One could view mandatory access recording as externally observable execution behavior, but the rubric explicitly targets opcode behavior and the draft specifies no opcode semantic change.
Added precompiles0No new precompile is introduced.
  • eip.md · Specification > SSZ Data Structures; Specification > State Transition Function The defined feature consists of BAL data and access-tracking validation, with no precompile address, input, gas schedule, or execution function introduced.
Uncertainty: Absence is based on the complete sealed specification; no precompile construction is present.
Modified precompiles0No pre-existing precompile logic or gas accounting is modified.
  • eip.md · Specification > SSZ Data Structures; Specification > State Transition Function BAL collection covers accounts and storage touched during execution but gives no changed behavior or gas schedule for any precompile.
Uncertainty: The draft does not enumerate precompile-specific BAL treatment, but that omission is not evidence of a precompile modification.
Added system contracts0It integrates existing system operations into BAL generation but introduces no new system contract.
  • eip.md · Specification > Important Implementation Details > Edge Cases; Specification > State Transition Function > process_system_contracts The proposal tracks state changes caused by already-identified EIP-7002, EIP-7251, EIP-2935, and EIP-4788 system contracts/addresses.
Uncertainty: The sealed draft labels these as existing EIP-defined operations and gives no deployment or initialization for a new contract.
EVM Gas rule changes0The proposal adds observability and block validation around execution but specifies no new or updated EVM gas-accounting rule.
  • eip.md · Specification > State Transition Function; Important Implementation Details > Edge Cases The new logic gathers accesses and post-state changes and validates a BAL commitment; gas refunds are mentioned only as a reason to record the sender's final balance.
Uncertainty: The draft does not explicitly state that gas schedules are unchanged, but none of its specified transition rules charges or recalculates gas.
Blob gas accounting changes0No blob gas accounting mechanism is introduced or modified.
  • eip.md · Specification > Block Structure Modification; Specification > SSZ Data Structures The added data is a block access list and its header commitment; the defined structures contain account and state-access data, not blob-gas fields or accounting.
Uncertainty: Absence is assessed from the complete sealed draft; no separate blob behavior is specified.
New EVM gas refund0Recording the post-refund balance does not create or alter an EVM gas-refund mechanism.
  • eip.md · Specification > Important Implementation Details > Edge Cases For gas refunds, the proposal only requires recording the sender's final balance after each transaction.
Uncertainty: No refund formula or refund-counter behavior is provided, so the reference to refunds is treated as tracking existing behavior only.
New transaction types0No new transaction type is introduced.
  • eip.md · Specification > Block Structure Modification The feature adds data at block header and block body level rather than defining a transaction envelope or transaction-type identifier.
Uncertainty: The BAL contains per-transaction indices, but indexing existing transactions is not a new transaction type.
New or modified transaction validity mechanisms0The new validity condition applies to the block's BAL commitment, not to the validity rules of existing transaction types or their intrinsic gas calculation.
  • eip.md · Specification > State Transition Function Missing or spurious BAL entries invalidate the block after transactions are executed and tracked; no transaction envelope validity or intrinsic-gas rule is specified.
Uncertainty: The sentence permitting immediate invalidation when a transaction exceeds declared state is not formally defined, but the draft provides no transaction-level declaration or validity algorithm to score.
New fork activation mechanismUnder-specified0A fork requirement alone is not a new activation mechanism, and initialization of the new tracking structure is excluded by the rubric's special note.
  • eip.md · Backwards Compatibility; Specification > State Transition Function The change requires a hard fork and initializes per-block access collection during validation, but specifies no one-time state or existing-internal-variable modification at the activation block.
Uncertainty: Activation-block handling and migration are not described explicitly; no sealed evidence supports a score-3 state or internal-variable modification.
Engine API changesUnder-specified0Under the rubric's endpoint-specific definition, no Engine API field or communication mechanism is actually specified.
  • eip.md · Specification > Block Structure Modification The draft defines bal_hash in the block header and a BAL in the body but does not identify any Engine API directive, endpoint, or field.
Uncertainty: Transport of the new block data may require Engine API work, but its field count and endpoint placement are materially absent and cannot be supplied from outside the package.
Engine API encoding changesUnder-specified0Scored conservatively at zero from the row label and global scale because the proposal contains no explicit Engine API encoding change.
  • eip.md · Rationale > BAL Design Choice The only explicit transport encoding says the SSZ BAL is embedded as opaque bytes in an RLP block; no Engine API encoding is described.
Uncertainty: The historical checklist provides no dedicated definition for this row, and the proposal also omits Engine API serialization details; both limitations prevent a more authoritative mapping.
CryptographyUnder-specified0Serialization, commitment use, and proof compatibility alone do not introduce a new cryptography mechanism under this anchor.
  • eip.md · Specification > SSZ Data Structures; Rationale > BAL Design Choice The proposal uses SSZ data structures and cites efficient Merkle proofs, but defines no novel cryptographic primitive or modification to an existing primitive.
Uncertainty: compute_bal_hash is invoked but not defined, leaving the exact commitment construction under-specified; nothing in the sealed text establishes that it is a new cryptographic mechanism.
Assessment provenance
Assessed EIP revision
ethereum/EIPs@59be937534 EIPS/eip-7928.md committed 2025-07-31 · information cutoff 2025-07-31T16:00:14Z
Current master · File history · blob 23900781a2 · sha256 c1973b06017a
Rubric
Checklist revision 1 · ethspecs/pm@d936bcb349
Evaluator
gpt-5.6-sol at xhigh reasoning effort · isolation bubblewrap_one_eip_capsule_v1
Source record
Frozen research record research/tasks/05c-amsterdam-human-assessment-alignment/outputs/automated/eip-7928.yaml · sha256 900cf876cd5a
Supporting documents in the sealed package
supporting/eip-2929.md, supporting/eip-2930.md, supporting/eip-7792.md

Evaluated on: Not recorded · Spec revision: 2026-04-20 · 645099785a

29HighHigh
Evaluator
HumanChecklist v1
Confidence
Not recorded
Under-specified at assessment cutoff
Not recorded in the checklist
Checklist published
2026-05-12 · EIP at 645099785a
Score bands · Checklist revision 1
  • Low <10
  • Medium 10–19
  • High ≥20

24 criteria scored 0–3 (4 in exceptional cases; cross-EIP interactions is uncapped); nominal maximum 72.

Complexity profile

Each segment is one criterion's contribution to the Human total. Hover or focus a segment for its score and rationale.

Top complexity drivers

  1. EVM Gas rule changes3
  2. New block / header fields3
  3. Engine API changes3
  4. Security risks3

Criterion breakdown

EIP-7928 Amsterdam / Glamsterdam: Human criterion scores and rationale
CriterionScoreWhy this scoreNotes
EVM Gas rule changes3No new gas schedule, but the EIP imposes a hard pre-state / post-state validation ordering on every state-accessing opcode (`BALANCE`, `EXT*`, `*CALL`, `CREATE*`, `SLOAD`, `SSTORE`, `SELFDESTRUCT`). Gas-charge sites had to be re-ordered across the spec because state was being accessed before gas was charged; off-by-one boundaries determine whether an address appears in the BAL, so the rule change cascades into existing gas tests across multiple forks.
New block / header fields3New `block_access_list_hash` (Hash32) on the header; `blockAccessList` carried out-of-header via the Engine API.
Engine API changes3Multiple fields **and** multiple new endpoints: `ExecutionPayloadV4` adds `blockAccessList`; new `engine_newPayloadV5`, `engine_getPayloadV6`, `engine_getPayloadBodiesByHashV2`, `engine_getPayloadBodiesByRangeV2` returning `ExecutionPayloadBodyV2`. EL must also retain BALs ≥ weak-subjectivity period.
Security risks3The BAL elevates **every state-access check** — not just state writes — into consensus-critical territory. Whether an account or slot appears in the BAL depends on whether the caller had enough gas to *touch* it (cold/warm cache, account existence, 7702 delegation load, static-context check, value-transfer gas), and whether ambient artefacts like the coinbase or precompiles are deemed "touched" under fee-burning, empty-block, zero-tip, and selfdestruct-to-self scenarios. Any client that mis-orders a gas check vs. a state observation, mis-classifies a touch, or leaks cross-block precompile state diverges from the block-hash-bound BAL and breaks consensus. This is a substantial expansion of the consensus surface that interacts with multiple critical components (EVM gas accounting, EIP-2929 warm/cold tracking, EIP-6780 selfdestruct semantics, EIP-7702 delegation resolution, system-contract handling) and warrants extensive review and fuzzing.
Performance risks3The BAL adds ~70 KiB/block of propagation overhead and is interwoven with execution — it cannot be benchmarked in isolation because validation requires re-deriving the BAL during the state transition. Builder behavior interacts with intra-tx coalescing, cross-frame shadowing, net-zero filtering, and the `R_remaining * 2000` gas-budget feasibility check. Benchmark suites under `tests/benchmark/stateful/eip7928_block_level_access_lists/` and `tests/benchmark/compute/eip7928_block_level_access_lists/` were added.
Edge/boundary conditions3An elevated number of cases is required. Per `test_cases.md` the BAL implementation drove gas off-by-one boundary tests at every state-access opcode (cold vs warm × OOG-before-target-access / OOG-after-target-access / success-minus-1 / success). Add: net-zero storage filtering (intra-tx coalescing, cross-frame shadowing, nested DELEGATECALL net-zero), CREATE/CREATE2 collisions, same-tx create+SELFDESTRUCT, 7702 invalid-nonce/invalid-chain-id, static-context filtering across all call opcodes, empty-block coinbase, zero-tip coinbase, system-address surplus filtering, RIPEMD-160 cross-block state leak, lexicographic byte-ordering endian traps.
Cross-EIP interactions3Strong interdependencies, with existing test vectors actively redesigned: EIP-2929 (warm/cold) drives the gas-boundary cliffs that gate BAL inclusion; EIP-2930 listed-but-untouched entries are explicitly excluded; EIP-1559 coinbase tipping vs. burned base fee determines coinbase inclusion; EIP-6780 changes selfdestruct persistence semantics that the BAL must mirror; EIP-7702 delegation creates a two-level access model (target vs. delegated target) with multiple OOG boundaries and authorization-failure cases; EIP-4895 withdrawals are credited at `index=n+1` with no EVM execution; EIP-2935, EIP-4788, EIP-7002, EIP-7251 each require system-contract storage diff and cross-index handling; EIP-1153 transient storage must be explicitly *excluded*; EIP-214 static-context restrictions must fire before BAL inclusion.
Modified system contracts2No direct modification, but **major** indirect effects on every system contract whose storage diffs/queue dequeues must now be recorded: EIP-2935 (HISTORY_STORAGE_ADDRESS), EIP-4788 (BEACON_ROOTS_ADDRESS), EIP-7002 (withdrawal requests), EIP-7251 (consolidation requests). Cross-index semantics (pre-execution `index=0`, post-execution `index=n+1`), partial vs. clean sweep for 7002/7251 queues, and `SYSTEM_ADDRESS` exclusion-unless-touched all required new tests.
Block syncing changes2A single complex RLP validation mechanism is introduced: the BAL itself, whose sub-rules include hash binding to the header, lexicographic address ordering, ascending `block_access_index` per change list, uniqueness per `(address, slot)`, mutual exclusion between `storage_changes` and `storage_reads`, `bal_items <= block_gas_limit // ITEM_COST`, and `SYSTEM_ADDRESS` exclusion unless touched. The three new block exceptions (`INVALID_BLOCK_ACCESS_LIST`, `INVALID_BAL_HASH`, `BLOCK_ACCESS_LIST_GAS_LIMIT_EXCEEDED`) all stem from this single validator.
Transition-tool interface changes2A single new mechanism — the BAL builder/validator wired into the t8n (`block_access_lists.py`, `BlockAccessListBuilder`, `hash_block_access_list`, `validate_block_access_list_gas_limit`) — surfaces one new payload output (`blockAccessList` on `ExecutionPayloadV4`). The `block_access_list_hash` on the header is **not an independent field**: it is fully determined as `keccak256(rlp(BAL))` and carries no information not already present in the BAL itself. It is a Merkle/checksum binding, comparable to `transactionsRoot` vs. the transaction list — counting it as a second "new field" would double-count one piece of information. So in t8n terms this is "a new mechanism" (singular) producing one new output, not "multiple new fields **and** a new mechanism" (the 3 bucket). Per the anchor's footnote, the t8n must additionally be fork-aware (Amsterdam-only activation), which warrants special consideration regardless of score.
Patterns affecting pre-existing tests2A considerable subset of existing tests is affected, but the impact is concentrated in a contrived category: benchmarks and gas-boundary fixtures. BAL changes the cost surface (added per-block data, propagation overhead, builder/validator work) so pre-existing benchmarks no longer represent worst cases — new adversarial scenarios (fan-out reads, many-slot touches, deep delegation chains, large BAL-item counts approaching `block_gas_limit // ITEM_COST`) need to be researched and added, and the benchmarking framework needs new metrics for BAL size, generation cost, and validation cost. Existing OOG-boundary fixtures across forks need their warm/cold/touch assumptions re-verified under BAL inclusion semantics. Outside those categories, most pre-existing tests need no rework — Amsterdam-filled tests generate and validate a BAL automatically as a consensus artefact.
Show 13 zero-score criteria
Zero-score criteria (Checklist revision 1)
CriterionScoreWhy this scoreNotes
Added opcodes0No rationale recorded.
Modified opcodes0Final EVM semantics (gas charged, state changes, reverts) are unchanged. Only the observation order for BAL inclusion is constrained, which is a spec-framework concern, not a behavior change in the anchor's sense.
Added precompiles0No rationale recorded.
Modified precompiles0No rationale recorded.
Added system contracts0No rationale recorded.
Blob gas accounting changes0No rationale recorded.
New EVM gas refund0No rationale recorded.
New transaction types0No rationale recorded.
New or modified transaction validity mechanisms0Transaction structure and intrinsic gas are unchanged.
Encoding changes (RLP/SSZ)0No rationale recorded.
New fork activation mechanism0No state mutation or pre-existing internal variable is modified at the activation block (the builder is initialized fresh per block).
Engine API encoding changes0Still RLP — no new wire encoding format introduced at the Engine API layer beyond what is captured under "Encoding changes (RLP/SSZ)".
Cryptography0Keccak-256 over RLP only — already covered.
Assessment provenance
Assessed EIP revision
ethereum/EIPs@645099785a EIPS/eip-7928.md committed 2026-04-20
EIP master revision at the time of the human checklist commit; the checklist itself does not pin an EIP revision.
Current master · File history · blob f744fd9572 · sha256 304c0e626e12
Rubric
Checklist revision 1 · ethspecs/pm@d936bcb349
Evaluator
STEEL team · ethspecs/pm complexity_assessments
Source record
Merged checklist ethspecs/pm@6d744f3a80 complexity_assessments/EIPs/EIP-7928.md · committed 2026-05-12
blob 509dfc6013 · sha256 a8d3e39c4aa0
Research record
research/tasks/05c-amsterdam-human-assessment-alignment/inputs/human/eip-7928.yaml · sha256 b0ff6c50cbc4

Both assessments applied Checklist revision 1 (24 criteria) to EIP-7928 in Amsterdam / Glamsterdam. Δ is LLM minus Human.

LLM26High
Human29High
Δ total−3Same tier
Criteria19/24agree exactly · 2 differ by 1 · 3 differ by 2+
Confounded comparison. The human checklist evaluated the EIP as it stood when the checklist was written; the LLM evaluated the sealed historical revision. Input alignment: substantive drift; human hindsight exposure: high exposure. The study's primary LLM score under checklist revision 2 is 40; it uses a different criterion inventory and thresholds and is not directly comparable to either total here.
Exposure evidence

The assessment explicitly relies on implementation files, permanent framework additions, benchmarks, planned and completed tests, spec churn, and bugs found by tests.

Substantive intervening revisions: Renames header field bal_hash->block_access_list_hash, specifies system-contract changes use tx_index = len(transactions) + 1, adds the rule that EIP-2930 access-list entries MUST NOT be auto-included, and extends the example. | Code changes now also track EIP-7702 delegation indicators. | Fixes system-contract tx_index from len(transactions) + 1 to len(transactions) throughout text, example and pseudocode. | Splits system-contract handling into pre-execution (tx_index = len(transactions)) and post-execution (len(transactions) + 1) phases, adds the explicit…

Complexity profiles side by side

LLM
Human

Largest disagreements: EVM Gas rule changes (−3), Engine API changes (−3), Encoding changes (RLP/SSZ) (+3), Patterns affecting pre-existing tests (+1), Modified system contracts (−1)

Per-criterion scores, Human versus LLM, ordered by the size of the difference
CriterionLLMHumanΔAgreementRationale from each source
EVM Gas rule changes03−3Differ by 2+
Show rationale

LLM The proposal adds observability and block validation around execution but specifies no new or updated EVM gas-accounting rule.

Human No new gas schedule, but the EIP imposes a hard pre-state / post-state validation ordering on every state-accessing opcode (`BALANCE`, `EXT*`, `*CALL`, `CREATE*`, `SLOAD`, `SSTORE`, `SELFDESTRUCT`). Gas-charge sites had to be re-ordered across the spec because state was being accessed before gas was charged; off-by-one boundaries determine whether an address appears in the BAL, so the rule change cascades into existing gas tests across multiple forks.

Encoding changes (RLP/SSZ)30+3Differ by 2+
Show rationale

LLM The proposal explicitly introduces a new block-level SSZ encoding carried within the RLP block, satisfying the binary score-3 anchor.

Human No rationale recorded.

Engine API changes03−3Differ by 2+
Show rationale

LLM Under the rubric's endpoint-specific definition, no Engine API field or communication mechanism is actually specified.

Human Multiple fields **and** multiple new endpoints: `ExecutionPayloadV4` adds `blockAccessList`; new `engine_newPayloadV5`, `engine_getPayloadV6`, `engine_getPayloadBodiesByHashV2`, `engine_getPayloadBodiesByRangeV2` returning `ExecutionPayloadBodyV2`. EL must also retain BALs ≥ weak-subjectivity period.

Modified system contracts12−1Differ by 1
Show rationale

LLM No system-contract code or state-transition behavior is directly changed, but their effects now have a minor indirect requirement: canonical BAL tracking and validation.

Human No direct modification, but **major** indirect effects on every system contract whose storage diffs/queue dequeues must now be recorded: EIP-2935 (HISTORY_STORAGE_ADDRESS), EIP-4788 (BEACON_ROOTS_ADDRESS), EIP-7002 (withdrawal requests), EIP-7251 (consolidation requests). Cross-index semantics (pre-execution `index=0`, post-execution `index=n+1`), partial vs. clean sweep for 7002/7251 queues, and `SYSTEM_ADDRESS` exclusion-unless-touched all required new tests.

Patterns affecting pre-existing tests32+1Differ by 1
Show rationale

LLM A mandatory, execution-derived validation object affects valid and invalid block construction across ordinary transfers, contract execution, withdrawals, exceptional halts, and system operations, requiring broad reworking of pre-existing block/state-transition test patterns.

Human A considerable subset of existing tests is affected, but the impact is concentrated in a contrived category: benchmarks and gas-boundary fixtures. BAL changes the cost surface (added per-block data, propagation overhead, builder/validator work) so pre-existing benchmarks no longer represent worst cases — new adversarial scenarios (fan-out reads, many-slot touches, deep delegation chains, large BAL-item counts approaching `block_gas_limit // ITEM_COST`) need to be researched and added, and the benchmarking framework needs new metrics for BAL size, generation cost, and validation cost. Existing OOG-boundary fixtures across forks need their warm/cold/touch assumptions re-verified under BAL inclusion semantics. Outside those categories, most pre-existing tests need no rework — Amsterdam-filled tests generate and validate a BAL automatically as a consensus artefact.

Added opcodes000Agree
Show rationale

LLM No new opcode is defined.

Human No rationale recorded.

Modified opcodes000Agree
Show rationale

LLM The EVM results, stack behavior, and state semantics of existing opcodes are not modified; BAL recording is block-validation instrumentation rather than opcode behavior under this anchor.

Human Final EVM semantics (gas charged, state changes, reverts) are unchanged. Only the observation order for BAL inclusion is constrained, which is a spec-framework concern, not a behavior change in the anchor's sense.

Added precompiles000Agree
Show rationale

LLM No new precompile is introduced.

Human No rationale recorded.

Modified precompiles000Agree
Show rationale

LLM No pre-existing precompile logic or gas accounting is modified.

Human No rationale recorded.

Added system contracts000Agree
Show rationale

LLM It integrates existing system operations into BAL generation but introduces no new system contract.

Human No rationale recorded.

Blob gas accounting changes000Agree
Show rationale

LLM No blob gas accounting mechanism is introduced or modified.

Human No rationale recorded.

New EVM gas refund000Agree
Show rationale

LLM Recording the post-refund balance does not create or alter an EVM gas-refund mechanism.

Human No rationale recorded.

New transaction types000Agree
Show rationale

LLM No new transaction type is introduced.

Human No rationale recorded.

New or modified transaction validity mechanisms000Agree
Show rationale

LLM The new validity condition applies to the block's BAL commitment, not to the validity rules of existing transaction types or their intrinsic gas calculation.

Human Transaction structure and intrinsic gas are unchanged.

New block / header fields330Agree
Show rationale

LLM The explicit new bal_hash header field satisfies the rubric's binary score-3 condition.

Human New `block_access_list_hash` (Hash32) on the header; `blockAccessList` carried out-of-header via the Engine API.

Block syncing changes220Agree
Show rationale

LLM This is a single but complex new block-encoding and validation mechanism that sync clients must ingest, decode, commit, and validate, matching score 2.

Human A single complex RLP validation mechanism is introduced: the BAL itself, whose sub-rules include hash binding to the header, lexicographic address ordering, ascending `block_access_index` per change list, uniqueness per `(address, slot)`, mutual exclusion between `storage_changes` and `storage_reads`, `bal_items <= block_gas_limit // ITEM_COST`, and `SYSTEM_ADDRESS` exclusion unless touched. The three new block exceptions (`INVALID_BLOCK_ACCESS_LIST`, `INVALID_BAL_HASH`, `BLOCK_ACCESS_LIST_GAS_LIMIT_EXCEEDED`) all stem from this single validator.

New fork activation mechanism000Agree
Show rationale

LLM A fork requirement alone is not a new activation mechanism, and initialization of the new tracking structure is excluded by the rubric's special note.

Human No state mutation or pre-existing internal variable is modified at the activation block (the builder is initialized fresh per block).

Engine API encoding changes000Agree
Show rationale

LLM Scored conservatively at zero from the row label and global scale because the proposal contains no explicit Engine API encoding change.

Human Still RLP — no new wire encoding format introduced at the Engine API layer beyond what is captured under "Encoding changes (RLP/SSZ)".

Transition-tool interface changes220Agree
Show rationale

LLM The state-transition workflow needs a new BAL validation mechanism and access to new block data, which best fits the rubric's score-2 anchor even though a concrete tool schema is absent.

Human A single new mechanism — the BAL builder/validator wired into the t8n (`block_access_lists.py`, `BlockAccessListBuilder`, `hash_block_access_list`, `validate_block_access_list_gas_limit`) — surfaces one new payload output (`blockAccessList` on `ExecutionPayloadV4`). The `block_access_list_hash` on the header is **not an independent field**: it is fully determined as `keccak256(rlp(BAL))` and carries no information not already present in the BAL itself. It is a Merkle/checksum binding, comparable to `transactionsRoot` vs. the transaction list — counting it as a second "new field" would double-count one piece of information. So in t8n terms this is "a new mechanism" (singular) producing one new output, not "multiple new fields **and** a new mechanism" (the 3 bucket). Per the anchor's footnote, the t8n must additionally be fork-aware (Amsterdam-only activation), which warrants special consideration regardless of score.

Security risks330Agree
Show rationale

LLM Incorrect access capture, canonicalization, hashing, or state-diff handling can affect consensus block acceptance and reconstructed state across execution, syncing, withdrawals, and system operations, warranting extensive review and fuzzing across critical components.

Human The BAL elevates **every state-access check** — not just state writes — into consensus-critical territory. Whether an account or slot appears in the BAL depends on whether the caller had enough gas to *touch* it (cold/warm cache, account existence, 7702 delegation load, static-context check, value-transfer gas), and whether ambient artefacts like the coinbase or precompiles are deemed "touched" under fee-burning, empty-block, zero-tip, and selfdestruct-to-self scenarios. Any client that mis-orders a gas check vs. a state observation, mis-classifies a touch, or leaks cross-block precompile state diverges from the block-hash-bound BAL and breaks consensus. This is a substantial expansion of the consensus surface that interacts with multiple critical components (EVM gas accounting, EIP-2929 warm/cold tracking, EIP-6780 selfdestruct semantics, EIP-7702 delegation resolution, system-contract handling) and warrants extensive review and fuzzing.

Performance risks330Agree
Show rationale

LLM Performance cannot be fully isolated because BAL construction, database access, execution scheduling, block propagation, and sync interact across the full block-processing path, with substantial effects on existing benchmarks.

Human The BAL adds ~70 KiB/block of propagation overhead and is interwoven with execution — it cannot be benchmarked in isolation because validation requires re-deriving the BAL during the state transition. Builder behavior interacts with intra-tx coalescing, cross-frame shadowing, net-zero filtering, and the `R_remaining * 2000` gas-budget feasibility check. Benchmark suites under `tests/benchmark/stateful/eip7928_block_level_access_lists/` and `tests/benchmark/compute/eip7928_block_level_access_lists/` were added.

Edge/boundary conditions330Agree
Show rationale

LLM Several interacting boundary-prone mechanisms require elevated combinatorial testing, especially revert/exception behavior, read-versus-write classification, system-operation indexing, ordering, and maximum lengths.

Human An elevated number of cases is required. Per `test_cases.md` the BAL implementation drove gas off-by-one boundary tests at every state-access opcode (cold vs warm × OOG-before-target-access / OOG-after-target-access / success-minus-1 / success). Add: net-zero storage filtering (intra-tx coalescing, cross-frame shadowing, nested DELEGATECALL net-zero), CREATE/CREATE2 collisions, same-tx create+SELFDESTRUCT, 7702 invalid-nonce/invalid-chain-id, static-context filtering across all call opcodes, empty-block coinbase, zero-tip coinbase, system-address surplus filtering, RIPEMD-160 cross-block state leak, lexicographic byte-ordering endian traps.

Cryptography000Agree
Show rationale

LLM Serialization, commitment use, and proof compatibility alone do not introduce a new cryptography mechanism under this anchor.

Human Keccak-256 over RLP only — already covered.

Cross-EIP interactions330Agree
Show rationale

LLM The proposal has strong dependencies on multiple past and same-era mechanisms whose accesses and state changes must be represented canonically, requiring extensive coordinated cross-EIP vectors.

Human Strong interdependencies, with existing test vectors actively redesigned: EIP-2929 (warm/cold) drives the gas-boundary cliffs that gate BAL inclusion; EIP-2930 listed-but-untouched entries are explicitly excluded; EIP-1559 coinbase tipping vs. burned base fee determines coinbase inclusion; EIP-6780 changes selfdestruct persistence semantics that the BAL must mirror; EIP-7702 delegation creates a two-level access model (target vs. delegated target) with multiple OOG boundaries and authorization-failure cases; EIP-4895 withdrawals are credited at `index=n+1` with no EVM execution; EIP-2935, EIP-4788, EIP-7002, EIP-7251 each require system-contract storage diff and cross-index handling; EIP-1153 transient storage must be explicitly *excluded*; EIP-214 static-context restrictions must fire before BAL inclusion.

Criterion legend and glossary

Every stacked bar, comparison matrix, and criterion table on this site uses the same criterion colours, abbreviations, and order. Colour marks the criterion group; the abbreviation and name identify the criterion. Scores are 0–3 per criterion (4 is exceptional; cross-EIP interactions is uncapped).

EVM surface

Opcodes, precompiles, and system contracts that are added or modified.

  • Added opcodes
    Introduces new opcodes
    Score anchors
    0
    No new opcodes are introduced.
    1
    A new simple opcode is introduced (no data portion, no complex stack mechanics, and a constant gas cost).
    2
    Multiple new simple opcodes are introduced, or a single new complex opcode is introduced (has data portion, or complex stack mechanics, or a dynamic gas cost).
    3
    Multiple new opcodes are introduced, and at least one of them is complex (has data portion, or complex stack mechanics, or a dynamic gas cost).
    • Cryptography opcodes are not considered complex by default. Refer to the "Cryptography" section for a separate assessment.
  • Modified opcodes
    Modifies pre-existing opcodes
    Score anchors
    0
    No pre-existing opcode modifications are introduced.
    3
    At least one pre-existing opcode's behavior is modified (not including gas changes) or a pre-existing opcode is deprecated.
  • Added precompiles
    Introduces new precompiles
    Score anchors
    0
    No new precompiles are introduced.
    1
    A new simple precompile is introduced (constant input length, constant gas cost).
    2
    Multiple new simple precompiles are introduced, or a single new complex precompile is introduced (dynamic input length or dynamic gas cost).
    3
    Multiple new precompiles are introduced, and at least one of them is complex (dynamic input length or dynamic gas cost).
    • Cryptography precompiles are not considered complex by default. Refer to the "Cryptography" for a separate assessment.
  • Modified precompiles
    Modifies pre-existing precompiles logic or gas-accounting
    Score anchors
    0
    No pre-existing precompiles are modified.
    1
    At least one pre-existing precompile has its gas schedule modified.
    2
    Multiple pre-existing precompiles have their gas schedule modified, or a single pre-existing precompile has its behavior modified.
    3
    The behavior of multiple pre-existing precompiles, or a single complex pre-existing precompile modified.
  • Added system contracts
    Introduces new system contract, stateful or not
    Score anchors
    0
    No new system contracts are introduced.
    1
    A new system contract is introduced that is not stateful nor does it trigger a new system action (e.g. requests to the consensus layer).
    2
    Multiple new system contracts are introduced or a single new system contract that is either stateful or triggers a new system action (e.g. requests to the consensus layer).
    3
    Multiple new system contracts are introduced and at least one of them is either stateful or triggers a new system action (e.g. requests to the consensus layer).
  • Modified system contracts
    Modifies pre-existing system contracts
    Score anchors
    0
    No modifications to pre-existing system contracts are introduced, directly or indirectly.
    1
    Does not directly modify any system contract, but its behavior has minor indirect effects on one or more system contracts.
    2
    Does not directly modify any system contract, but its behavior has major indirect effects on one or more system contracts.
    3
    At least one pre-existing system contract code or state is modified, which would involve irregular state transition or a similarly complex transition methodology.

Gas and accounting

Execution, blob, and state gas rules, refunds, and where charges happen inside opcodes.

  • EVM Gas rule changes
    New EVM gas accounting rules
    Score anchors
    0
    No gas accounting changes.
    1
    Existing gas accounting mechanism is updated.
    2
    A new gas accounting mechanism is introduced but it does not affect existing mechanisms nor does it affect existing tests.
    3
    A new gas accounting mechanism is introduced and affects existing mechanisms which in turn affect existing tests.
  • State-access ordering within opcode execution · Checklist revision 2 only
    Changes *where inside an opcode's execution* state is accessed, or where gas is charged relative to that access. Because a state access is recorded in the block-level access list only if execution had enough gas to reach it, this ordering is consensus-critical: moving it changes the BAL at every gas boundary of every affected opcode.
    Score anchors
    0
    No change to where state is accessed, or to where gas is charged relative to a state access, within any opcode.
    1
    A single opcode's state-access or gas-charge ordering changes.
    2
    Multiple opcodes' ordering changes, or a new state-accessing operation is introduced whose position in the order must be settled.
    3
    The ordering rule changes for a whole class of state-accessing opcodes at once, or what counts as a recordable state access is redefined — requiring existing BAL vectors to be re-derived across opcodes and forks.
    • Distinct from "Modified opcodes", which asks whether an opcode's **result** changed. This row asks about the **path to the result**, which is observable even when the result is identical. An EIP can be 0 on that row and 3 on this one.
    • Score changes **to** the ordering. Do not score the fact that state accesses are observable — they always are.
    • Each boundary must be re-tested against every other dimension that can change the answer (cold/warm, static/non-static, delegated/direct, revert/success), so the case count grows multiplicatively rather than additively. Note this explicitly under Special Considerations.
  • Blob gas accounting changes
    New Blob gas accounting rules which potentially affect pre-existing tests
    Score anchors
    0
    No blob gas accounting changes.
    1
    Existing blob gas accounting mechanism is updated.
    2
    A new blob gas accounting mechanism is introduced but it does not affect existing mechanisms nor does it affect existing tests.
    3
    A new blob gas accounting mechanism is introduced and affects existing mechanisms which in turn affect existing tests.
  • State gas accounting changes · Checklist revision 2 only
    New state gas accounting rules. State gas is the cost of *writing* state, as opposed to accessing or executing it: `StateGasCosts`, `COST_PER_STATE_BYTE`, the block-level state gas budget, and the spill path into execution gas.
    Score anchors
    0
    No state gas accounting changes.
    1
    An existing state gas cost or `STATE_BYTES_PER_*` rate is adjusted.
    2
    A new state-gas-charging site is introduced, or the block-level state gas budget or reservoir allocation is modified.
    3
    A new state gas charging mechanism is introduced, or the spill interaction between state gas and execution gas is modified, affecting existing gas tests.
    • Harder to test than blob gas: the spill path means state gas cannot be metered independently of execution gas, and some costs (e.g. `NEW_ACCOUNT`) are state-dependent.
  • New EVM gas refund
    New gas-refund mechanism
    Score anchors
    0
    No new gas-refund mechanisms are introduced.
    1
    A new simple gas-refund mechanism is introduced that does not affect either existing tests or existing gas-refund mechanisms.
    2
    A new complex gas-refund mechanism is introduced or a simple mechanism that affects existing tests or existing gas-refund mechanisms.
    3
    A new complex gas-refund mechanism is introduced that affects existing tests or existing gas-refund mechanisms.

Blocks, transactions, and encoding

Transaction types and validity, block and header fields, encodings, syncing, and activation-time changes.

  • New transaction types
    Introduces a new transaction type
    Score anchors
    0
    No new transaction types are introduced.
    3
    A new transaction type is introduced.
  • New or modified transaction validity mechanisms
    Creates new or modifies pre-existing transaction types' validation mechanisms
    Score anchors
    0
    No changes are introduced to the validity rules of existing transaction types or to their intrinsic gas cost calculation.
    1
    Minor adjustments are introduced to validity rules or intrinsic gas cost calculation, but they do not significantly affect existing tests.
    2
    Changes to validity rules or intrinsic gas cost calculation affect existing tests, but require only limited updates to test cases and no redesign of the testing infrastructure.
    3
    Changes to validity rules or intrinsic gas cost calculation require extensive rework or redesign of the tests or testing infrastructure.
  • New block / header fields
    Introduces new block or block header fields
    Score anchors
    0
    No new block or header fields are introduced.
    3
    A new block or header field is introduced.
  • Encoding changes (RLP/SSZ)
    Introduces encoding changes at the transaction/block/interfaces level
    Score anchors
    0
    No encoding changes are introduced at the transaction, block, or interfaces levels.
    3
    An encoding change is introduced at transaction, block or interfaces level (e.g. RLP -> SSZ).
    • "Interfaces level" includes the Engine API. Score an Engine API encoding change (e.g. JSON -> SSZ) here.
  • Block syncing changes
    Modifies block RLP validation mechanisms that require test client syncing.
    Score anchors
    0
    No new RLP validation mechanism is introduced.
    1
    A single simple RLP validation mechanism is introduced.
    2
    Multiple simple RLP validation mechanisms are introduced or a single complex one.
    3
    Multiple RLP validation mechanisms are introduced and at least one of them is deemed complex.
  • New fork activation mechanism
    Modifies state, internal variables, or similar, at the fork activation block
    Score anchors
    0
    No state modifications, internal variables or similar are modified at the fork activation block.
    3
    Either a state modification or internal variables are modified at the fork activation block.
    • Initialization of new internal variable is not considered a modification.

Client interfaces

Engine API and transition-tool interface changes.

  • Engine API changes
    Introduces new fields to the Engine API directives
    Score anchors
    0
    No new fields or communication mechanisms are introduced to the Engine API.
    1
    A single new field is introduced in one of the Engine API endpoints.
    2
    Multiple fields are introduced to one or multiple Engine API end points, or a new Engine API end-point is introduced.
    3
    Multiple fields are introduced to one or multiple Engine API end points and a new Engine API end-point is introduced.
  • Engine API encoding changes · Checklist revision 1 only
    Engine API encoding changes (the revision-1 template defines no anchor text for this row).
  • Transition-tool interface changes
    Modifies or adds new fields to the transition tool interface.
    Score anchors
    0
    No modifications to the transition tool interface are required.
    1
    A single new field needs to be introduced to the transition tool interface.
    2
    Multiple new fields or a new mechanism has to be introduced to the transition tool interface.
    3
    Multiple new fields and a new mechanism has to be introduced to the transition tool interface.
    • Special consideration must be paid to this section if the EIP introduces a mechanism that requires the state transition tool to be aware whether the block it is processing is the fork-activation block.

Testing impact

Rework, new invariants, and new primitives required in the test framework.

  • Patterns affecting pre-existing tests
    Implements a new validation mechanism or rule that translates in reworking pre-existing tests
    Score anchors
    0
    No pre-existing tests are affected by this change.
    1
    Minor subset of existing tests are affected by this change.
    2
    Considerable subset of existing tests are affected by this change but involves only a contrived category of tests.
    3
    Major subset of existing tests are affected, including diverse category of tests (benchmarks, static, multiple forks, etc.).
  • New invariant on pre-existing tests · Checklist revision 2 only
    Tests that are **not about this EIP** must nonetheless assert something this EIP produces. Their logic does not change; they gain a new thing to check.
    Score anchors
    0
    Pre-existing tests assert nothing new.
    1
    A narrow, contrived category of pre-existing tests gains a new assertion.
    2
    A broad category gains a new assertion, applied mechanically.
    3
    Every test in the fork gains the assertion regardless of what it tests, and pre-fork vectors must be re-derived to satisfy it.
    • Paired with the row above, and easy to confuse with it. "Patterns affecting pre-existing tests" asks whether existing tests must be **reworked**; this row asks whether they must **additionally assert something new**. Score both — an EIP can be low on one and high on the other.
  • New test-framework primitives · Checklist revision 2 only
    Requires new abstractions in the test framework itself — expectation types, modifiers, helpers — beyond writing test functions with what already exists.
    Score anchors
    0
    Existing test primitives suffice.
    1
    Existing primitives need minor extension.
    2
    New expectation or modifier primitives are required, reusable within this EIP's own test suite.
    3
    New framework-level primitives are required that become a permanent part of the framework and are used by other EIPs' tests.

Risk and validation

Security, performance, boundary conditions, and cryptography that need validation.

  • Security risks
    Introduces or modifies mechanisms that could compromise the security of the chain, users, validators, or other stakeholders, if not implemented properly.
    Score anchors
    0
    No new mechanisms are introduced that could pose a security risk.
    1
    The introduced mechanisms are self-contained, can be validated in isolation, and do not alter existing invariants that could pose a security risk for any stakeholders.
    2
    The introduced mechanisms interact with a limited number of existing components, slightly altering their security assumptions and requiring a targeted security review or fuzzing.
    3
    The introduced mechanisms interact with multiple existing components, including critical ones, substantially altering their security assumptions and requiring an extensive security review and fuzzing.
  • Performance risks
    Introduces or modifies mechanisms and requires performance validation.
    Score anchors
    0
    No new mechanisms are introduced that require performance validation.
    1
    The introduced mechanisms can be benchmarked in isolation and do not affect existing performance behavior.
    2
    The introduced mechanisms cannot be fully benchmarked in isolation, but they only have a limited impact on the existing performance benchmarks.
    3
    The introduced mechanisms cannot be benchmarked in isolation and have a substantial impact on existing performance benchmarks or have complex interactions with existing mechanisms.
  • Edge/boundary conditions
    Feature contains edge/boundary conditions.
    Score anchors
    0
    No discernible edge cases or boundary conditions are introduced.
    1
    A single edge-case or boundary-condition prone mechanism is introduced.
    2
    Multiple edge-case or boundary-condition prone mechanisms are introduced, but none of them requires an elevated number of cases to test.
    3
    Multiple edge-case or boundary-condition prone mechanisms are introduced and at least one of them requires an elevated number of cases to test.
  • Cryptography
    Introduces new cryptography mechanisms or modifies existing functionality that involves cryptography
    Score anchors
    0
    No cryptography mechanisms are introduced.
    1
    A new cryptography mechanism is introduced but it is a well known mechanism that is known to have vast resources to aid on its testing.
    2
    Multiple new cryptography mechanisms are introduced that are well-known or a single but novel mechanism is introduced that is either untested or has limited resources.
    3
    Multiple new cryptography mechanisms are introduced and at least one of them is a novel mechanism.

Coordination

Cross-EIP interactions and behavior that clients must agree on before tests exist.

  • Cross-EIP interactions
    Introduces or modifies mechanisms that affect other EIPs in either the same or past forks.
    Score anchors
    0
    Fully self-contained EIP that does not depend on, modify, or conflict with any other EIP.
    1
    The EIP interacts with one or more other EIPs in a non-critical and limited way but can be tested independently for the most part.
    2
    The EIP depends on or modifies one or more other EIPs such that coordinated testing and consideration is required, but interactions are limited in scope and not complex.
    3
    The EIP has strong interdependencies with multiple EIPs, requiring extensive coordinated cross-EIP testing as well as potential re-design of existing test vectors.
    • +1 for every 3 additional interacting EIPs beyond the first 3, each of which requires its own coordinated test cases. List the EIPs in the rationale.
    • This row is intentionally uncapped, unlike every other anchor: each interacting EIP is another axis of the test matrix, so a ceiling would make a 12-EIP product indistinguishable from a 3-EIP one.
  • Unspecified behavior requiring cross-client consensus · Checklist revision 2 only
    The EIP text does not determine the answer for cases a test can construct. Clients must agree on a previously unspecified detail before tests can be baselined. The cost here is coordination and re-baselining, not test writing.
    Score anchors
    0
    The EIP text determines the answer for every case a test could construct.
    1
    A few details are unspecified but have an obvious intended reading.
    2
    Details require client agreement before tests can be written, but they are localized.
    3
    A previously unspecified *and previously unobservable* behavior becomes consensus-critical; expect tests to be re-baselined on each round of EIP amendment.
    • Score this from the EIP's state at assessment time: whether it has client implementations, whether it has been through a devnet, and how many open questions remain on its discussion thread.