feat(specs,tests): merge EIP-8037 into forks/amsterdam#2891
Draft
fselmo wants to merge 189 commits into
Draft
Conversation
fix(spec-specs): correct CR issues, fix formatting fix(spec-specs): inline `execute_code()` to `process_message()` chore(spec-specs): backport changes fix(spec-specs): trim out whitespace in topic hash to match tests feat(spec-specs): add selfdestruct event topic and logging function feat(spec-specs): selfdestruct to self emits selfdestruct event feat(spec-specs): define call success constant feat(spec-specs): emit selfdestruct finalization log for remaining balance
test(test-tests): add selfdestruct topic and use empty account test(test-tests): add nested calls log ordering test feat(test-tests): add selfdestruct finalization test fix(test-tests): use spaces in event signature to match spec
…e charges (ethereum#2059) * fix(spec-specs): Move account closure log emission before priority fee charges * fix(spec-specs): formatting and spelling tweaks * fix(spec-specs): remove duplicate WriteInStaticContext check * refactor(spec-specs): align memory expansion with other opcodes * fix(testing/test): Fix unit test expectation * refactor(spec-specs): move post-mining coinbase balance calculation --------- Co-authored-by: Mario Vega <marioevz@gmail.com>
* feat(test-specs): add/refactor tests, add mainnet marked, checklist, coverage check * feat(test-specs): add fork transition test for selfdestruct logs * fix: tests * chore(test-specs): fix fork transition tests * test(test-specs): add code deposit oog test case --------- Co-authored-by: carsons-eels <carson@ethereum.org> Co-authored-by: Mario Vega <marioevz@gmail.com>
) * fix(spec,text): Updates to EIP-7708 spec for bal-devnet-2 - fix(spec,test): EIP-7708 emit selfdestruct logs only in same tx - fix(spec,test): EIP-7708, only emit on transfers to other accounts - Add more tests that match these edge cases * feat(test): tests for finalization selfdest + bal transfer in lexicographic order * fix: changes from comments on PR ethereum#2086 * add more variants to test_selfdestruct_same_tx_via_call * fix: docstring * refactor: improvements from comments on PR ethereum#2086 * Update test to use dynamic addresses --------- Co-authored-by: Mario Vega <marioevz@gmail.com>
… (ethereum#2106) - Add CREATE2 support via with_all_create_opcodes marker - Add tests for SELFDESTRUCT to coinbase - revealed a change needed since the last update was made to the EIP that should be included in the currect refspec (miner fees paid before finalization LOG2).
Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
…m#2211) * ♻️ refactor: Rename selfdestruct log to burn * 🥢 nit: * chore(tests): fix stale selfdestruct references and rename to burn --------- Co-authored-by: raxhvl <raxhvl@users.noreply.github.com> Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
… no-log (ethereum#2717) * feat(tests): EIP-7708 - multi-account finalization burn log ordering Adds a dedicated test that proves finalization burn logs are emitted in lexicographical address order when multiple accounts are marked for deletion in the same transaction. Parametrized over N in {2, 5}. N accounts are created and SELFDESTRUCT'd in the same tx, then funded via payer contracts called in REVERSE sorted address order with distinct nonzero amounts. Each destroyed account ends with a unique nonzero balance at finalization, so ordering by address vs. by call order is always distinguishable. Addresses issue ethereum#2691. * feat(tests): EIP-7708 - coinbase priority fee must not emit transfer log Adds a dedicated test proving the coinbase priority fee payment does not produce a Transfer log. A contract CALLs the coinbase address with nonzero value while the tx pays a nonzero priority fee to that same coinbase. Only the CALL-with-value must produce a Transfer log; the priority fee credit happens outside the EVM as a protocol-level balance change. An implementation that hooks every balance addition (instead of only CALL / SELFDESTRUCT / tx-level value transfers) would emit an extra Transfer log for the fee and fail the exact-log assertion. Addresses issue ethereum#2692. * feat(tests): add single account multi transfer test * fix(tests): minor nit --------- Co-authored-by: marioevz <marioevz@gmail.com>
Align EIP-7708 selfdestruct finalization test with the gas constant rename on forks/amsterdam.
…unds (ethereum#1401) * feat(specs): add eip-7778 implementation * fix(specs) spliting receipt gas from block gas * revert receipt_gas_used * make sure that the calldata floor cost overwrites the tx gas before refund * receipt gas used after refunds * clarify variable naming @gurukamath * revert to using gas used after refunds for cumulative gas in receipt and add gasSpent to receipt * spec(amsterdam): fix code formatting --------- Co-authored-by: Guruprasad Kamath <guru241987@gmail.com>
* fix(tests): fix legacy tests to run with eip-7778 * fix(tests): check gas_spent and gas_used after Amsterdam
* feat(spec-tests): add eip-7778 for calldata checks * feat(spec-tests): post review - use code gas_cost function Co-authored-by: Louis Tsai <72684086+LouisTsai-Csie@users.noreply.github.com> * Apply suggestions from code review --------- Co-authored-by: Louis Tsai <72684086+LouisTsai-Csie@users.noreply.github.com> Co-authored-by: Mario Vega <marioevz@gmail.com>
The set iteration in `build_refund_tx` is non-deterministic due to Python's hash randomization, causing fixture output to vary between runs. Sort by enum value to ensure reproducible fixtures.
* feat(amsterdam): Implement EIP-7843 SLOTNUM opcode * mario feedback
…thereum#2816) * feat(spec): 7702 auth state gas fix * fix(test): fix existing auth tests to expect block-level gas accounting for 7702 refunds * chore(test): un-skip 7702 tests that now no longer fail * fix: change 7702-related 8037 tests to reflect new behavior --------- Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
* feat(tests): 8037 - test 7702 auth state-gas tests for top-level failure * refactor(tests): Fix per PR reviews
Co-authored-by: felipe <fselmo2@gmail.com>
* feat(spec-specs, tests): 8037 2d edge cases * refactor(tests): Combine almost duplicated tests * refactor(test): DRY - merge boundary tests together and parametrize --------- Co-authored-by: fselmo <fselmo2@gmail.com>
…on Amsterdam (ethereum#2796) * fix(ported_static): EIP-8037 gas headroom and fork-conditional measurements Rebase of branch wt-snobal-4-amsterdam-state-gas-fixes onto bal/7 HEAD. Two upstream changes drive the new revision: - `bcc2a876d` raises `COST_PER_STATE_BYTE` from 1 174 to 1 530, so per-storage state-gas is now `32 * 1530 = 48 960` and per-new- account state-gas is `112 * 1530 = 171 360`. - `2e707c22c` etc. add fresh entries to `amsterdam_skip_list.txt` covering more tests broken by EIP-8037 on Amsterdam. The 11 original commits on this branch collapsed to a single revision because: - test_sstore_change_from_external_call_in_init_code.py — bal/7's upstream version (`tx_gas = [intrinsic + tx_data[d].gas_cost (fork)]` with `inner_call_cost` annotations) supersedes the gas bump this branch had. Keep bal/7's version, drop the bump. - test_storage_costs, test_varied_context, test_manual_create, test_precomps_eip2929_cancun — replace the hardcoded SSTORE-set and NEW_ACCOUNT spillover deltas (20 468 / 106 488 / 126 956, derived for CPSB = 1 174) with fork-helper expressions (`fork.sstore_state_gas() - 17 100`, `fork.create_state_gas() - 25 000`, and their sum) so the deltas auto-adapt to the new 1 530 CPSB and any future change. - All other gas-bump tests — keep their fork-conditional structure from the prior `refactor(ported_static): make EIP-8037 gas bumps fork-conditional` commit, but raise the EIP-8037 budgets where 1 530 CPSB pushes the previous bump under the new spill (test_ storage_costs, test_manual_create, test_codesize_valid, test_callcode_dynamic_code, test_wallet_construction, test_ callcodecallcodecallcode_111_suicide_end). Pre-EIP-8037 values are still preserved. Skip list: start from bal/7's 1 062-entry list (which already covered the new failures the CPSB bump introduced), then drop the 165 entries that point at files this branch fixes. New total: 732. Verified across Cancun/Prague/Osaka/Amsterdam: 60 476 passed, 0 failed. Amsterdam alone: 16 482 passed, 0 failed, 2 448 skipped. * style(ported_static): fix lint — line lengths and ruff format Apply `just fix` formatting to the 4 gas-measurement tests this branch touches (test_storage_costs, test_varied_context, test_manual_create, test_precomps_eip2929_cancun) plus an upstream-drift reformat picked up in test_state_gas_call.py. Shorten the E501-flagged docstring line in test_manual_create by dropping the inline assignment from the explanation. `just static` passes (exit 0).
…thereum#2845) * feat(spec): remove SD state gas refunds from EIP-8037 * feat(tests): invert SD state gas refund expectations for EIP-8037 * chore: a bit tighter gas accounting on selfdestruct test --------- Co-authored-by: fselmo <fselmo2@gmail.com>
…erdam tests (ethereum#2839) * fix(ported_static): fork-conditional gas bumps for stCallCodes/stCallDelegateCodes* _suicide_end family 28 tests in the `*_suicide_end` family share the same nested CALL/CALLCODE/DELEGATECALL pattern with three hardcoded inner gas values (`0xC350` 50k / `0x186A0` 100k / `0x249F0` 150k). On Amsterdam each SSTORE in the innermost callee adds per-storage state-gas (`32 * COST_PER_STATE_BYTE`) that spills back into regular gas when the reservoir is empty, OoG'ing the inner CALL before its SSTORE marker fires. Apply fork-conditional `inner_call_gas` / `middle_call_gas` / `outer_call_gas` variables that keep the original 50k / 100k / 150k on pre-EIP-8037 forks and bump to `0x186A0` / `0xC3500` / `0xF4240` on Amsterdam. Each file also gets the `fork: Fork` parameter, the `Fork` import, and a `@manually-enhanced` docstring marker. Drops 28 entries from `amsterdam_skip_list.txt` (897 -> 869). * fix(ported_static): fork-conditional tx_gas for stCreate2 collision tests `test_create2collision_balance`, `_code`, `_code2`, `_nonce` all share the same pattern: tx with `gas_limit=400_000` deploys a contract via CREATE2 that collides with an existing account. EIP-8037 NEW_ACCOUNT state-gas spill on Amsterdam exceeds the 400k budget, OoG'ing the tx before the collision check. Apply fork-conditional `outer_tx_gas = 400_000` (or `1_000_000` on EIP-8037). Pre-EIP-8037 keeps the original; post-state unchanged on all forks. Marked `@manually-enhanced`; dropped 4 Amsterdam skip entries (869 -> 865). * fix(ported_static): fork-conditional tx_gas for stCreate2 revert_depth_create_address_collision Two tests (`_collision` and `_collision_berlin`) share the same `tx_gas = [110_000, 170_000]` pattern: tx OoGs on Amsterdam where EIP-8037 NEW_ACCOUNT state-gas spillover exceeds the budget at the CREATE2-via-revert path. Apply fork-conditional `[500_000, 700_000]` on EIP-8037; pre-EIP-8037 keeps the original tuned values. Marked `@manually-enhanced`; dropped the corresponding Amsterdam skip entries (857 -> 849). * fix(ported_static): fork-conditional tx_gas for stRandom*/test_random_statetest* family 9 auto-generated `test_random_statetest*` files (stRandom and stRandom2) all use `tx_gas = 100_000`. EIP-8037 state-gas spill on Amsterdam pushes the tx OoG before its SSTORE marker fires. Apply fork-conditional `tx_gas_limit = 100_000` (pre-EIP-8037) or `500_000` (EIP-8037). Each file gets `fork: Fork` parameter, `Fork` import, and `@manually-enhanced` marker. Pre-EIP-8037 behavior unchanged. Dropped corresponding Amsterdam skip entries. * fix(ported_static): fork-conditional CALL gas for push0 / revert_opcode_in_calls / coinbase_warm_fail Three tests where an inner CALL/DELEGATECALL with a small hardcoded gas budget OoG'd on Amsterdam due to EIP-8037 state-gas spill: - `stEIP3855_push0/test_push0.py` — `inner_call_gas` (100k → 1M) for the SSTORE-containing callees - `stRevertTest/test_revert_opcode_in_calls_on_non_empty_return_data.py` — three nested DELEGATECALL gas values bumped fork-conditionally - `stEIP3651_warmcoinbase/test_coinbase_warm_account_call_gas_fail.py` — `tx_gas` bumped from 80k to 500k All three preserve original values on pre-EIP-8037 forks. Each file marked `@manually-enhanced`. Dropped corresponding Amsterdam skip entries. * fix(ported_static): batch fork-conditional gas bumps for 7 simple cases Tests where a single `tx_gas` or inner-CALL `gas=` literal was hardcoded too tight for EIP-8037 state-gas spill on Amsterdam: - stCallCodes/test_callcode_in_initcode_to_empty_contract - stCallCreateCallCodeTest/test_create_fail_balance_too_low - stCreate2/test_create2_first_byte_loop - stCreate2/test_create2_suicide - stRevertTest/test_revert_opcode_calls - stSystemOperationsTest/test_call_to_name_registrator0 - stSystemOperationsTest/test_callcode_to_return1 Each gets fork-conditional `outer_tx_gas` / `inner_call_gas` variables defaulting to the original budget on pre-EIP-8037 and bumped on EIP-8037. Each file marked `@manually-enhanced`; skip entries dropped. * fix(ported_static): fork-conditional tx_gas for stSystemOperationsTest/test_create_name_registrator* family The four `test_create_name_registrator*` tests share the same `tx_gas_limit=300000` budget. On Amsterdam, EIP-8037 NEW_ACCOUNT state-gas spills into regular gas and OoGs the CREATE. Bump fork-conditionally to 1_000_000 on EIP-8037 only; pre-EIP-8037 forks unchanged. Removes 4 entries from the skip list. * fix(ported_static): fork-conditional tx_gas for stMemoryTest mem32kb/mem64kb single-byte family 18 tests share `gas_limit=100000` plus a single SSTORE-set after MSTORE8 at offset 32k or 64k. On Amsterdam the SSTORE-set state-gas spill exceeds 100k. Bump fork-conditionally to 300k (32kb) / 1M (64kb) on EIP-8037 only; pre-EIP-8037 unchanged. Removes 18 entries from the skip list. * fix(ported_static): fork-conditional tx_gas for stMemoryTest mem{0,31,32,33}b_single_byte The four small mem-byte tests share `gas_limit=100000` + a single SSTORE-set. Even with no memory expansion, the EIP-8037 SSTORE-set state-gas spill exceeds the original 100k tx budget. Bump fork- conditionally to 200k on EIP-8037 only. Removes 4 entries from the skip list. * fix(ported_static): fork-conditional tx_gas bumps for stPreCompiledContracts2 modexp_0_0_0_* family The four `modexp_0_0_0_*` tests share a 4-element `tx_gas` budget list where the lower entries OoG on Amsterdam due to EIP-8037 state-gas spill (the inner MODEXP CALL leaves no headroom for the post-call SSTORE-set). For 22000/25000/35000 all expectations require the SSTORE to succeed, so bump all four entries to 200000. For 20500, entry g0 is the negative-case (must still OoG and leave storage empty), so it keeps the original 42540; only g1/g2 are bumped. Pre-EIP-8037 forks unchanged. Removes 11 entries from the skip list. * fix(ported_static): fork-conditional tx_gas for stRandom/stRandom2 auto-generated tests 260 random-statetest files share the same `gas_limit=100000` budget with a single SSTORE-set in the post-state. On Amsterdam the SSTORE- set state-gas spill exceeds 100k. Bump fork-conditionally to 500_000 on EIP-8037 only; pre-EIP-8037 forks unchanged. Removes 260 entries from the skip list (the entire stRandom + stRandom2 sections). * fix(ported_static): fork-conditional gas for stTransactionTest/internal_call_hitting_gas_limit_success The test names its inner CALL gas (25k) and tx gas (150k) precisely to land inside the SSTORE-set on Cancun. Amsterdam adds 48k state- gas spill per SSTORE-set, OoGing the inner CALL. Bump inner CALL gas to 200k, tx to 500k, env gas limit to 1M on EIP-8037 only; pre- EIP-8037 unchanged. Removes 1 entry from the skip list. * fix(ported_static): fork-conditional gas bumps for misc stCreateTest/stCallCreateCallCodeTest init-code tests Four tests share the pattern of a tx with inner CALL forwarding 60k gas that performs a fresh SSTORE-set in the callee. On Amsterdam, EIP-8037 state-gas spill (and NEW_ACCOUNT spill on the create_init_* test) OoGs the inner CALL. Bump inner CALL gas and tx gas fork- conditionally; pre-EIP-8037 unchanged. Removes 4 entries from the skip list. * fix(ported_static): fork-conditional gas for stInitCodeTest deploy txs Three contract-creation tests have `gas_limit` precisely tuned around the Cancun intrinsic (53k base + small calldata). EIP-8037 folds the new-account state-gas (~171k) into the TX_CREATE intrinsic, pushing the effective floor above the original budget. Bump tx gas (and the sender's funded balance where it needed extra room) fork-conditionally on EIP-8037 only; pre-EIP-8037 unchanged. Removes 3 entries from the skip list. * fix(ported_static): fork-conditional tx_gas[1] for stCreate2/test_create_message_reverted g1=150000 is meant to succeed (CREATE2 deploys a contract that SSTORE 0=12, SSTORE 1=13). On Amsterdam, EIP-8037 NEW_ACCOUNT plus 2x fresh SSTORE-set state-gas spill exceeds 150k. Bump g1 to 500k on EIP-8037 only; g0 (the OoG-by-design parametrization) stays at 80k. Sender balance also bumped to cover the larger budget. Pre- EIP-8037 forks unchanged. Removes 1 entry from the skip list. * fix(ported_static): fork-conditional gas for stRevertTest revert_in_create_in_init / revert_opcode_return Both tests share the pattern of a tightly-budgeted tx that the state-gas spill from a fresh SSTORE-set (revert_opcode_return) or nested CREATE NEW_ACCOUNT (revert_in_create_in_init_paris) blows out on Amsterdam. Bump tx gas (only tx_gas[1] for revert_opcode_return so the other parametrization keeps its tuned budget) fork-conditionally on EIP-8037 only; pre-EIP-8037 unchanged. Removes 2 entries from the skip list. * chore(ported_static): restore Amsterdam skip entries that the gas bumps no longer cover After the CPSB recalibration (1174 → 1530), 42 tests that earlier commits in this branch un-skipped now fail again on Amsterdam. The fix variables in those test files are still good for pre-EIP-8037 forks, but the bumped Amsterdam budgets are no longer sufficient at CPSB=1530 — and several of the suicide_end/collision tests bake the gas literal into the contract bytecode that the post-state hashes, so bumping the value would break the code-match assertions. Restore the skip entries so the Amsterdam run is clean; the per-test fixes can be retuned by hand in a follow-up. * chore(test): hex -> int for readability * chore(ported_static): trim verbose state-gas narrative from suicide_end docstrings --------- Co-authored-by: fselmo <fselmo2@gmail.com> Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
…bal/7 # Conflicts: # docs/CHANGELOG.md # packages/testing/src/execution_testing/tools/utility/generators.py # src/ethereum_spec_tools/evm_tools/t8n/t8n_types.py # tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py # tests/ported_static/stQuadraticComplexityTest/test_call20_kbytes_contract50_2.py # tests/ported_static/stQuadraticComplexityTest/test_call50000.py # tests/ported_static/stQuadraticComplexityTest/test_callcode50000.py # tests/prague/eip6110_deposits/conftest.py # tests/prague/eip7002_el_triggerable_withdrawals/conftest.py
… type-4 transactions (ethereum#2867)
Add a `large_zero_calldata_and_access_list_insufficient_gas` parametrize to `test_floor_cost_validation_with_access_list`, paralleling the existing `large_calldata_and_access_list_insufficient_gas` (non-zero bytes) and exercising the `intrinsic <= gas_limit < floor` window with a 1,700-gas margin between regular intrinsic and floor (vs. ~19,700 for the non-zero variant). Closes ethereum#2800.
…bal/7 # Conflicts: # docs/writing_tests/test_markers.md # packages/testing/src/execution_testing/specs/blockchain.py # src/ethereum/forks/amsterdam/fork.py # src/ethereum/forks/amsterdam/vm/__init__.py # src/ethereum/forks/amsterdam/vm/instructions/system.py # src/ethereum/forks/amsterdam/vm/interpreter.py # tests/amsterdam/eip7708_eth_transfer_logs/spec.py # tests/amsterdam/eip7708_eth_transfer_logs/test_burn_logs.py # tests/amsterdam/eip7708_eth_transfer_logs/test_fork_transition.py # tests/amsterdam/eip7708_eth_transfer_logs/test_transfer_logs.py # tests/amsterdam/eip7778_block_gas_accounting_without_refunds/test_gas_accounting.py # tests/amsterdam/eip7843_slotnum/test_slotnum.py # tests/amsterdam/eip7954_increase_max_contract_size/test_fork_transition.py # tests/amsterdam/eip7954_increase_max_contract_size/test_max_code_size.py # tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py # tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
…ereum#2863) Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
Merge resolves conflicts between forks/amsterdam (15 commits since the last devnets/bal/7 sync) and devnets/bal/7's EIP-8037 spec + test work. Verified: no files from devnets/bal/7 are missing from the merge tree; all diffs vs devnets/bal/7 are within the file set touched by the 15 forks/amsterdam commits ahead of the previous sync.
forks/amsterdam
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## forks/amsterdam #2891 +/- ##
===================================================
- Coverage 90.44% 88.91% -1.53%
===================================================
Files 535 496 -39
Lines 32439 29758 -2681
Branches 3012 2723 -289
===================================================
- Hits 29338 26459 -2879
- Misses 2573 2814 +241
+ Partials 528 485 -43
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🗒️ Description
Starting the process of merging EIP-8037. Easiest way to do this seemed to be the following, then fixing the conflicts only once for the merge commit:
git checkout -b merge/eip-8037-into-amsterdam upstream/forks/amsterdamgit merge --no-ff upstream/devnets/bal/7Summary:
just staticcheck--fork=Amsterdamuv run hasher compareon 8037 tests andtests/ported_statictests for Amsterdam so far have yielded the same hashesTODOs:
Missing pieces from
forks/amsterdam- everything except the conflicting code paths in two PRs landed cleanly:get_coderesolution insidegeneric_call. Incompatible with EIP-8037, which needscodebefore the call to charge state gas. Re-layer by passingcode_address(togeneric_call) and resolving insidegeneric_callafter the pre-charge phase.Op.CALLkwargs (args_size/ret_size split, address_warm=, account_new=, new_memory_size=). Couldn't merge inline across 14 conflict regions without risking losing EIP-8037 state-gas assertions. Replay parametrize + kwargs. Note: This might just be takeforks/amsterdam's changes and then see how 8037 applies / breaks things, if at all.test_gas_refunds_from_data_floor[AUTHORIZATION_EXISTING_AUTHORITY]: EIP-8037 makesREFUND_AUTH_PER_EXISTING_ACCOUNT = 183,600(15× Prague).to()fixture's JUMPDEST-padded code overruns max_code_size. MSTORE memory-expansion fix gets 6/9 passing; 3 GREATER_THAN_DATA_FLOORvariants still off-by-1 - the test's execution_gas_cost predictor doesn't model the auth-refund-to-state-reservoir interaction. Fix: align the predictor with the spec, or split AUTHORIZATION out for Amsterdam.
🔗 Related Issues or PRs
N/A.
✅ Checklist
just statictype(scope):.mkdocs servelocally and verified the auto-generated docs for new tests in the Test Case Reference are correctly formatted.@ported_frommarker.Cute Animal Picture