Skip to content

chore(tests): review for #3566 - #35

Merged
fselmo merged 9 commits into
fselmo:feat/eip7928-extended-coveragefrom
spencer-tb:pr3566-review-fixes
Sep 15, 2026
Merged

fselmo merged 9 commits into
fselmo:feat/eip7928-extended-coveragefrom
spencer-tb:pr3566-review-fixes

Conversation

@spencer-tb

@spencer-tb spencer-tb commented Sep 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

Follow-ups to ethereum#3566: fix BAL fixture failures, strengthen encoding and zero-value coverage, and refresh the EIP reference pins. Each commit is a separate change.

Commits

  1. 6ae21cbfe5 — Refresh EIP-7928 pins. Replace the unavailable reference commit and outdated compute-benchmark pin with the merged d2a64c2d commit in all three locations.

  2. 5ee4f2d758 — Correct precompile parameter types. Use Address in the two tests receiving values from with_all_precompiles.

  3. 0d282c920a — Explain coinbase inclusion. Correct two comments: the coinbase enters the BAL through the fee credit, including a zero credit.

  4. 4f2daa9ef1 — Map Reth's BAL decoding error. Recognize failed to decode block access list as INVALID_BLOCK_ACCESS_LIST instead of reporting an undefined exception.

  5. 437bf1503d — Accept the block-hash diagnosis. Allow INVALID_BLOCK_HASH alongside INVALID_BLOCK_ACCESS_LIST in the malformed-payload and non-minimal-integer tests when clients reject during header reconstruction. Update the test-case documentation.

  6. b3b2b999cb — Fix the gas-limit fixture's BAL cap conflict. Raise the block limit to 100,000 and keep the transaction one gas above it. The system-contract BAL fits the cap, leaving the transaction gas allowance as the intended failure.

  7. af813764cf — Add matching-header malformed-BAL cases. Test empty bytes, a non-list RLP value, and a truncated list with both header commitments. The new matching-header cases require INVALID_BLOCK_ACCESS_LIST; mismatched-header cases retain either diagnosis.

  8. f44bd11d44 — Strengthen zero-value assertions. Require all recipient BAL change lists to be empty when no change is expected. Document why pre-existing empty-account deletion from EIP-161: Sending zero to an empty account ethereum/execution-specs#3341 is outside valid Amsterdam test states.

  9. b47945ae67 — Isolate pre-fork hash rejection from API validation. Stop injecting a BAL payload field when only the header hash is corrupted, and retain explicit payload overrides. Keep the extra-field test active with -32602, as required by the strict-field rule inherited from Cancun. Preserve the general header-to-payload docstring explanation.

Issue resolution

Pre-fork BAL-field responses

The final commit b47945ae67 separates the two cases:

  • Geth's header-hash case: the engine fixture omits blockAccessList, leaving valid pre-fork parameters and an incorrect block hash. The RLP fixture retains the illegal header field.
  • Reth's extra-field case: the test remains active and expects -32602. Prague newPayloadV4 inherits Cancun's strict parameter and field matching rule; ExecutionPayloadV3 has no blockAccessList field. The client fix is proposed in reth#27248: reject non-null blockAccessList and slotNumber fields on newPayloadV3/V4 with -32602, while treating null as absent and preserving V5 handling. The EELS test stays enabled.

`f834f000…` no longer exists in ethereum/EIPs: it was a pre-force-push
commit of EIPs#12277, which squash-merged on 2026-09-09 as
d2a64c2d4cc44f2f507577d0ebfb110dcc21d358 (rationale-only wording change).
The stateful benchmark refresh copied the dead hash and the compute
benchmark test still carried aca88aa0. PR CI only collects the version
checks, so none of the three were flagged.
The `with_all_precompiles` marker yields an `Address`, which is what
`test_bal_precompile_funded` already declares; match it in the two other
tests that consume the same parameter.
The coinbase lands in the BAL because the priority-fee credit touches it
even when the fee is zero (`create_ether(coinbase, transaction_fee)` in
`process_transaction`), not because EIP-3651 warms it: warmth is a gas
property and records no access. Reword both gas-limit boundary comments.
…_ACCESS_LIST

reth rejects a non-minimally encoded BAL with "failed to decode block
access list: leading zero". The mapper had no pattern for it, so six
`test_bal_invalid_non_minimal_scalar_encoding` engine fixtures failed as
"Undefined exception message" although reth rejects the block.
…oads

A client that hashes the payload's BAL bytes into its reconstructed
header before validating the encoding (reth) answers INVALID_BLOCK_HASH
where the fixtures only accepted INVALID_BLOCK_ACCESS_LIST. EIP-7928
fixes neither order, and both verdicts reject the block, so
`test_bal_invalid_engine_payload_encoding` and
`test_bal_invalid_non_minimal_scalar_encoding` now accept either. Nine
reth consume-engine failures on the 2026-09-14 glamsterdam run.
With a 21000 block gas limit the BAL item cap is 10, but an empty
Amsterdam block already carries 25 items of system-contract reads and
writes, so the engine payload is invalid twice over. besu, geth, reth
and nimbus report the cap before the transaction's gas allowance
(ethereum#3439) while EELS reports the allowance first. A 100000 limit keeps the
transaction the only defect; every fork still fills with
GAS_ALLOWANCE_EXCEEDED.
@spencer-tb
spencer-tb marked this pull request as ready for review September 15, 2026 11:08
@spencer-tb spencer-tb changed the title chore(tests,test-client-clis): review fixes for #3566 and BAL consume-engine follow-ups chore(tests): review for #3566 Sep 15, 2026
@fselmo
fselmo merged commit ff26d80 into fselmo:feat/eip7928-extended-coverage Sep 15, 2026
@fselmo

fselmo commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Thanks! I've got some minor tweaks to this but merging and will slap it on top

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants