Skip to content

feat(benchmark): support tx gas limit cap in stateful benchmarks#1962

Merged
danceratopz merged 11 commits intoethereum:forks/amsterdamfrom
CPerezz:feat/update-stateful-benches-osaka
Jan 14, 2026
Merged

feat(benchmark): support tx gas limit cap in stateful benchmarks#1962
danceratopz merged 11 commits intoethereum:forks/amsterdamfrom
CPerezz:feat/update-stateful-benches-osaka

Conversation

@CPerezz
Copy link
Contributor

@CPerezz CPerezz commented Jan 2, 2026

🗒️ Description

Update SLOAD/SSTORE and multi-opcode stateful benchmark tests to support Fusaka's 16M transaction gas limit. Tests now split large attack transactions into multiple smaller ones that each respect the tx_gas_limit cap while still filling the entire block gas budget.

Changes:

  • Added tx_gas_limit fixture parameter to all affected test functions in test_single_opcode.py and test_multi_opcode.py
  • Calculate num_txs = max(1, gas_benchmark_value // tx_gas_limit) to determine how many transactions are needed
  • Split single large attack transaction into multiple smaller transactions in a list
  • Updated gas calculations to be per-transaction rather than per-block

🔗 Related Issues or PRs

N/A.

✅ Checklist

  • All: PR title adheres to the repo standard - it will be used as the squash commit message and should start type(scope):.
  • Tests: Verified SLOAD and SSTORE benchmarks work with --transaction-gas-limit 16000000 and --gas-benchmark-values 34 on Anvil

Cute Animal Picture

image

@CPerezz CPerezz changed the base branch from forks/osaka to forks/amsterdam January 2, 2026 22:33
Update SLOAD/SSTORE and multi-opcode stateful benchmark tests to
support Fusaka's 16M transaction gas limit. Tests now split large
attack transactions into multiple smaller ones that each respect the
tx_gas_limit cap while still filling the entire block gas budget.
@CPerezz CPerezz force-pushed the feat/update-stateful-benches-osaka branch from 035ff6c to 2762e3a Compare January 2, 2026 22:47
@codecov
Copy link

codecov bot commented Jan 2, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 86.33%. Comparing base (d618e52) to head (186382d).
⚠️ Report is 33 commits behind head on forks/amsterdam.

Additional details and impacted files
@@               Coverage Diff                @@
##           forks/amsterdam    #1962   +/-   ##
================================================
  Coverage            86.33%   86.33%           
================================================
  Files                  538      538           
  Lines                34557    34557           
  Branches              3222     3222           
================================================
  Hits                 29835    29835           
  Misses                4148     4148           
  Partials               574      574           
Flag Coverage Δ
unittests 86.33% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@jochem-brouwer
Copy link
Member

I think we should update these tests to use BenchmarkTest, as this supports the logic which I think this PR also adds. See:

for i in range(num_splits):
split_tx = tx.model_copy()
split_tx.gas_limit = HexNumber(
remaining_gas if i == num_splits - 1 else gas_limit_cap
)
remaining_gas -= gas_limit_cap
split_tx.nonce = HexNumber(tx.nonce + i)
split_transactions.append(split_tx)

This works for tests if the transactions are just "copies" and there are no differences necessary per tx like changing calldata for instance (which in some cases we need to change as for instance calldata inputs to starting salts of the CREATE2 address calculator)

CC @LouisTsai-Csie

@CPerezz
Copy link
Contributor Author

CPerezz commented Jan 3, 2026

I think we should update these tests to use BenchmarkTest, as this supports the logic which I think this PR also adds. See:

for i in range(num_splits):
split_tx = tx.model_copy()
split_tx.gas_limit = HexNumber(
remaining_gas if i == num_splits - 1 else gas_limit_cap
)
remaining_gas -= gas_limit_cap
split_tx.nonce = HexNumber(tx.nonce + i)
split_transactions.append(split_tx)

This works for tests if the transactions are just "copies" and there are no differences necessary per tx like changing calldata for instance (which in some cases we need to change as for instance calldata inputs to starting salts of the CREATE2 address calculator)

CC @LouisTsai-Csie

  • EXTCODESIZE/EXTCODECOPY/EXTCODEHASH attacks: The attack bytecode reads num_deployed_contracts from factory storage and iterates from salt 0 to that value. If we split into multiple identical transactions, each transaction would:
  1. Start at salt 0
  2. Access the same contracts again
  3. Those contracts would be warm on subsequent transactions (defeating the purpose of cold access benchmarks)
  • CALL attack: Same issue - iterates from salt 0 each time.
  • SLOAD/SSTORE attacks (in test_single_opcode.py): These call ERC20 balanceOf/approve on a fixed set of contracts. The same contracts get accessed each transaction instead of varying

So, to elaborate, BenchmarkTest.split_transaction cannot be used for these benchmarks because:

  • It creates identical transaction copies (same calldata)
  • Each copy would access the same addresses starting from salt 0
  • After the first transaction, those addresses are warm, not cold
  • This would fundamentally change what's being benchmarked

The current manual transaction splitting approach in test_multi_opcode.py has the same issue though - the transactions are also identical. To properly benchmark cold access across multiple transactions, the attack contracts would need to:

  • Accept a starting salt offset in calldata
  • Each transaction would pass a different offset

JIC, can you confirm this makes sense @LouisTsai-Csie ?

@jochem-brouwer
Copy link
Member

Ah I see, yes I was giving this advice based on the diff, but as I now understand this has to be updated such that the attack contracts support a way to pick up the attack at a certain offset. Yes, for non-identical transactions the splitter cannot be used. However I think at some point we should include the calldata case where the transactions differ, since this is currently the go-to to make attacks start at a specific offset (so we could refactor later and add this feature to the transaction splitter, where txs have calldata based on some start offset and on an increase of this offset for each new tx).

Copy link
Member

@danceratopz danceratopz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, @CPerezz! Could you please take a look at the comment on the overhead_per_contract in test_single_opcode? Once that's addressed, I think we can merge as-is and address any refactors in a follow-up PR.

Carsons-Eels pushed a commit to Carsons-Eels/execution-specs that referenced this pull request Jan 6, 2026
…nceof

Adds per-contract overhead calculation to accurately account for loop
setup/teardown costs in the gas budget calculation.
@CPerezz CPerezz requested a review from danceratopz January 6, 2026 22:41
@CPerezz
Copy link
Contributor Author

CPerezz commented Jan 6, 2026

i think everything is addressed @danceratopz

Could you merge if everything is indeed ok?

Copy link
Member

@danceratopz danceratopz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the update @CPerezz! Excuse me being pedantic, but I was going to suggest some clean-up and came across the inconsistency below.

Replace arbitrary 1000 gas cleanup reservation with precise
calculations for setup_overhead, cleanup_overhead, and
loop_condition_overhead in test_multi_opcode.py tests.

This aligns with the approach used in test_single_opcode.py.
Use correct EVM gas constants for opcode costs:
- G_BASE (2) -> G_VERY_LOW (3) for DUP, ISZERO, MLOAD, MSTORE, SUB
- G_MID (8) -> G_HIGH (10) for JUMPI
- G_LOW (5) -> G_VERY_LOW (3) for MLOAD, MSTORE

This fixes underestimation of loop_condition_overhead and
overhead_per_contract calculations in test_multi_opcode.py and
test_single_opcode.py.
Copy link
Member

@danceratopz danceratopz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @CPerezz, I think some of the gas constants used in the calculations and comments are incorrect. This is a real pain - we need to absolutely try to remove as much of this accounting burden from test authors as possible. I thought it might be easier to PR my suggestions here:

Otherwise, could you please address the remaining missing contract overhead. Sorry that these have landed in drips and drabs!

…saka-suggestions

fix(test-benchmark): update gas constants in calculations and comments
@CPerezz CPerezz requested a review from danceratopz January 8, 2026 10:38
Account for per-contract loop setup/teardown overhead:
- SLOAD loop: MSTORE init + JUMPDEST + condition check (23 gas)
- SSTORE loop: MSTORE selector + MSTORE init + JUMPDEST + condition (26 gas)
- Total: 49 gas per contract

This aligns with the approach used in test_sload_empty_erc20_balanceof
and test_sstore_erc20_approve.
CPerezz and others added 2 commits January 8, 2026 16:20
…saka-suggestions-2

fix(tests-benchmark): apply `overhead_per_contract` in `test_mixed_sload_sstore`; fix `JUMPI` gas
Copy link
Member

@danceratopz danceratopz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @CPerezz, let's try and get closure on this PR! 👍

Looks like we both added commits to address the missing overhead_per_contract. That's the main remaining thing to address in the scope of this PR. I would suggest we remove the second one added in bf5724a, could you please check the suggestion below that removes it?

I don't want to be overcritical, but unfortunately there are still issues in the gas accounting for overhead cost estimation (some pre-date this PR). One obvious offender is the superfluous 100 gas for the non-existant STATICCALL base cost.

I'm not sure how precise these calculations need be for these tests, which target state growth (the attack is still valid). We should not address them in this PR, but if you think we should nail down exact costs, we could create a follow-up issue to review them. Perhaps you can pass comment on how important these costs are? A quick explanation in the next benchmarking call would be great. Thanks!

Comment on lines 770 to 780
# Per-contract fixed overhead (setup + teardown for each contract's loop)
overhead_per_contract = (
gas_costs.G_VERY_LOW # MSTORE to initialize counter (3)
+ gas_costs.G_JUMPDEST # JUMPDEST at loop start (1)
+ gas_costs.G_VERY_LOW # MLOAD for While condition check (3)
+ gas_costs.G_BASE # ISZERO (2)
+ gas_costs.G_BASE # ISZERO (2)
+ gas_costs.G_MID # JUMPI (8)
+ gas_costs.G_BASE # POP to clean up at end (2)
)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Per-contract fixed overhead (setup + teardown for each contract's loop)
overhead_per_contract = (
gas_costs.G_VERY_LOW # MSTORE to initialize counter (3)
+ gas_costs.G_JUMPDEST # JUMPDEST at loop start (1)
+ gas_costs.G_VERY_LOW # MLOAD for While condition check (3)
+ gas_costs.G_BASE # ISZERO (2)
+ gas_costs.G_BASE # ISZERO (2)
+ gas_costs.G_MID # JUMPI (8)
+ gas_costs.G_BASE # POP to clean up at end (2)
)

@danceratopz
Copy link
Member

@CPerezz just a follow-up comment and heads up about the gas accounting. @marioevz just proposed the following to help simplify gas cost calculations:

I would merge this PR with the suggestions above and then add an issue to refactor the gas accounting with #2002, once it's merged. Happy to help or even take the lead on that. How does that sound?

Copy link
Member

@danceratopz danceratopz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for adding this @CPerezz!

@danceratopz danceratopz merged commit 2c83b84 into ethereum:forks/amsterdam Jan 14, 2026
15 checks passed
mijovic pushed a commit to monad-developers/execution-specs that referenced this pull request Feb 11, 2026
* chore(forks): update Osaka and BPO fork deployment status (ethereum#2013)

* refactor(test-benchmark): relabel repricing marker (ethereum#2015)

* chore(ci): reduce docker hub rate limit usage in hive-consume workflow (ethereum#2004)

Co-authored-by: danceratopz <danceratopz@gmail.com>

* fix(test-types): log `Transaction` values as readable hex-strings instead of raw bytes (ethereum#1803)

Co-authored-by: felipe <fselmo2@gmail.com>
Co-authored-by: danceratopz <danceratopz@gmail.com>

* fix(test-types): strip extra fields from geth receipts (ethereum#2014)

Geth returns additional fields in transaction receipts that are not part of the model:

- `type`: transaction type field.
- `blockNumber`: block number field.

Strip these fields to maintain compatibility with modern geth while keeping strict validation for unexpected fields.

* feat(benchmark): support tx gas limit cap in stateful benchmarks (ethereum#1962)

Co-authored-by: danceratopz <danceratopz@gmail.com>

* feat(testing/forks): Implement `bytecode.gas_cost(fork)` (ethereum#2002)

* feat(testing/vm): Implement bytecode gas calc

* feat(tests): Use `bytecode.gas_cost` in some tests

* refactor: Renames, tox fixes

* feat(specs): Implement EIP-7928: Block-Level Access Lists

fix(tests): Fix Amsterdam filling after rebase
fix(specs): Fix issues with new ruff + mypy rules after rebase

- bal -> block_access_list; re-add custom rlp encoding for block access list
- bytes to uint
- move away from method-style

- Update EIP-7928 implementation: system contracts at index 0, migrate to RLP
  - System contracts (parent hash, beacon root) now use block_access_index 0
  - Transactions use block_access_index 1 to len(transactions)
  - Post-execution changes use block_access_index len(transactions) + 1
  - Migrated from SSZ to RLP encoding as per updated EIP-7928 spec
  - Updated all tests to match new API and structure
  - Replaced tx_index with block_access_index throughout codebase

- add system contract logic
- add markdown docstrings
- update BAL format; address comments
- ssz encoding and bal validation
- six ssz types
- bal tests
- balspecs

fix: do not track setting empty code to a new account (ethereum#19)
fix: track implicit SLOAD within SSTORE for OOG cases (ethereum#18)
refactor: Put back explicit acct tracking outside 7702 delegation path (ethereum#17)
fix non-tracked 7702 authority for invalid delegations (ethereum#16)
    * fix non-tracked 7702 authority for invalid delegations
    * fix: lint issues
    * fix: track delegation target when loaded as call target
    * fix: track delegation target when loaded as call target from call
      opcodes
    * chore: fix issues with documentation generation

Fix self-destruct cases with pre-execution balance cache / tracking
    * fix self-destruct implementation
    * fix self-destruct tracking balance
    * fix it in the bal finalization by filtering
    * add balance reset and fix tests
    * simplify pre-balance tracking not using snapshots

fix duplicated code entries for in transaction self destruct
fix self destruct in same transaction bug
fix call/delagate call tracking bug
fix zero-value transfer tracking (#6)
    * fix zero-value transfer tracking
    * fix reverted frame tracking
    * rename variables
    * fix missing addresses bug
    * fix: docs run & move imports to top of file

refactor: move rlp_utils to block_access_lists; bal -> block_access_lists
Some remaining fixes due to large refactor in `forks/osaka`:

- Move BALs from amsterdam -> forks/amsterdam
- rename: build -> build_block_access_list
- fix docc issues

move state change tracker to State

correct system contract addresses

Fixes to communicate with BALs EEST branch:

- fix(bal): Initialize the state tracker before system contract calls

- We were missing system contract calls to beacon roots and history
  contracts. This change initializes the state tracker before system
  contract calls and passes the tracker to these calls if post-Amsterdam.

- fix(docs): Fix issues with toxenvs: lint, doc, json_infra
- fix(t8n): Only initialize the bal_change_tracker for amsterdam
- feat(fork criteria): Index upcoming forks for better ordering / fix issues
- chore(forks): Fix issues from lint after rebase with Osaka latest
- fix(setuptools): Update packages to include amsterdam
- chore(lint): Fix 'tox -e static' issues

- Fix bug in tracker
  Manually cherry-picked from e72991b
  Author: nerolation

- chore(tests): Attempt to resolve issues with CI tests
- chore(lint): fix issues from running ``tox -e static`` locally
- refactor(bal): Send BAL as a list over t8n tool
- fix(amsterdam): Add change tracker to state test in t8n
- chore(lint,tests): Fix tests after moving bal from osaka -> amsterdam
- chore(forks): Move bals from Osaka to Amsterdam
- chore(lint): Fix lint issues

- refactor(bal): Send the full bal object and bal_hash over t8n

  - If we send the full object over JSON, we can model_validate() on ESST.
  - If we send the hash, once we fill the pydantic model, we can get the rlp
    and the hash and validate that our objects match while only really
    validating the parts of the BAL we are interested in for each test.

- chore: point to working eest branch
- chore(bals): Remove unused SSZ utils.py
  The SSZ implementation is no longer needed as we are now using RLP
- refactor(bals): Clean up BAL module types and imports
  - Bytes -> Bytes32 type for storage slots
  - Remove unused imports / fix imports / fix linting
  - Update function signatures to match tracker

- fix(bals-tx-index): Track bal indexes in t8n
  Keep track of BAL index state in t8n

* fix(specs): Fix zero value withdrawals BAL tracking (ethereum#29)

* fix(specs): Fix zero value withdrawals BAL tracking

* docs(specs): rename 'finalize' to 'normalize' in comments

* docs(specs): remove reference to uint128 for balance tracking

---------

Co-authored-by: Toni Wahrstätter <51536394+nerolation@users.noreply.github.com>
Co-authored-by: Toni Wahrstätter <info@toniwahrstaetter.com>

* fix(specs): static upfront check for create + selfdestruct (ethereum#22)

* feat(tests): Implement more EIP-7928 tests

refactor(tests): Prevent skips by splitting tests appropriately

fix(tests): Use valid inputs to precompile tests

chore(tests): linting fixes

feat(tests): EIP-7928 test_bal_storage_write_read_cross_frame

feat(tests): EIP-7928 test_bal_storage_write_read_same_frame

feat(tests): EIP-7928 test_bal_nonexistent_account_access

feat(tests): EIP-7928 test_bal_nonexistent_value_transfer

feat(tests): EIP-7928 test_bal_precompiles

feat(tests): EIP-7928 test_bal_withdrawal_to_coinbase_empty_block

feat(tests): EIP-7928 test_bal_withdrawal_to_coinbase

feat(tests): EIP-7928 test_bal_withdrawal_largest_amount

feat(tests): EIP-7928 test_bal_withdrawal_to_precompiles

fix(tests): expectation for nonexistent account in post

fix(specs,tests): Fix withdrawal tests for BALs issue with idx==0

- `self.txs.successfully_parsed` is a list of transaction indexes, not
  transactions. The "if tx" check here would then check `if 0` which
  parses as a boolean ``False``. This means we would skip counting the tx
  if index=0 was successful.

- Fixes some test expectations where `post_code` was being checked instead
  of ``new_code``.

feat(tests): EIP-7928 test_bal_zero_withdrawal

feat(tests): EIP-7928 test_bal_withdrawal_and_new_contract

feat(tests): EIP-7928 test_bal_withdrawal_and_selfdestruct

feat(tests): EIP-7928 test_bal_multiple_withdrawals_same_address

feat(tests): EIP-7928 withdrawal_and_value_transfer_same_address

feat(tests): EIP-7928 withdrawal_and_state_access_same_account

feat(tests): EIP-7928 test_bal_withdrawal_no_evm_execution

feat(tests): EIP-7928 test_bal_withdrawal_to_nonexistent_account

feat(tests): EIP-7928 test_bal_withdrawal_empty_block

feat(tests): EIP-7928 test_bal_withdrawal_with_transaction

feat(tests): EIP-7928 coinbase

* fix(specs): Ensure tracking before first access (ethereum#1722)

* fix(spec-specs): duplicate storage writes in state tracker (ethereum#1743)

- Perform a similar check to balance changes and other
  tracker methods and keep only the last write.

* fix(test-specs): validate t8n BAL independent of expectation existence (ethereum#1742)

- Validate static checks on the t8n BAL if it exists
- IF the expectation also exists, validate against the expectation

Keep these checks separate as this helps validation now that we fill
for all tests, regardless if they have an expectation or not.

* feat(specs): EIP-7928 refactoring

* fix(spec-specs): require and use blockenv for state tracking

* refactor(spec-specs): track BAL changes via frames

* fix(spec-specs): Mark original addr warm before delegation

Co-authored-by: spencer spencer.taylor-brown@ethereum.org

* fix(spec-specs): Make sure we account for no changes

* fix(spec-specs): Better tracking for code changes; ensure with BAL test

* fix(spec-specs): Use child frame for create message

* fix(spec-specs): Normalize transaction before merging to block frame

* fix(spec-specs): Early static check for SSTORE before any reads

* fix(spec-specs): Track storage writes more appropriately wrt index

* fix(spec-specs): Use functions, not methods; fix create revert

* fix(spec-specs): Default code to b"" in tracker, skip empty setting

* fix(spec-specs): Fix BAL cross-transaction tracking and nonce dedup

 - add commit_transaction_frame() - no net-zero filtering
   for cross-tx changes
 - keep max nonce per transaction when building BAL, remove
   block-level code filtering
 - filter net-zero code changes at tracking time
   (for 7702 txs)
 - use commit_transaction_frame() instead of
   merge_on_success() for tx->block commits

* fix(spec-specs): Move destroy_account before BAL normalization

* fix(spec-specs): Check delegation access gas before reading

* fix(spec-specs): Track code per auth; filter pre at tx frame

* fix(spec-specs): Use proper frames for system transactions

* fix(spec-specs): Track address at init collision

* chore(spec-specs): Add Amsterdam docstring; update prepare msg

* chore: Add pre-amsterdam BAL tests to doc for tracking

* fix(spec-specs): Calculate all gas we can before accessing state

- Calculate all gas that we can without state access and check this
  gas before ever accessing state. This is the most sensible way for
  an implementation to behave and indeed was revealed to be the way
  clients are behaving, which differed from the specs.

- Use fork.gas_costs to calculate gas costs, NOT hard-coded values.

- Create a BAL expectation for the test that yielded discrepancies
  between clients and specs so this doesn't slip through again.
  Document this test in `test_cases.md`.

* fix(test-tools): Remove named forks from blobSchedule; turn off BPOs

* fix(cli): add bal exception for erigon (ethereum#1809)

* feat(test): Better describe the BAL for selfdestruct revert

* test(eip7928): add EXTCODECOPY OOG memory expansion BAL test

* refactor(test-tests): parametrize existing test oog case instead

* test(eip7928): add cross-block precompile state leak test

* refactor(test-tests): Add BAL expectation to state leak test; fix lint

* feat(test): add SELFDESTRUCT OOG BAL test

* refactor(tests): move selfdestruct bal tests to oog file; add gas boundaries

- more updates to test_cases.md

* feat(tests): Port oog create refund test; add BAL >= Amsterdam

* refactor(spec-specs): Refactor state changes and frame hierarchy (ethereum#1841)

* refactor(spec-specs): Refactor state changes and their frames

* chore(spec-specs): cleanup BAL logic; organize gas check for SSTORE

* refactor(spec-specs): Changes from comments on PR ethereum#1841

* enhance: don't set defaults for state_changes

* fix(spec,tests): Change BAL to List[AccountChange] (ethereum#1844)

* fix(spec): update BAL type

* fix(tests): run amsterdam jsons

* fix(test-specs): Add BAL to genesis beyond Amsterdam fork

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* fix(spec-specs): Fix issues after rebasing with forks/osaka

- fix mkdocs

* feat(test): add more bal test cases (ethereum#1812)

* rebase onto upstream
* chore(fix) balance check in call before target access
* merge test cases with usptream
* chore(fix) format with ruff
* chore(fix) revert call changes and add target to bal
* merge test cases with usptream
* improve wording
* chore(formate) fix formatting and line length
* refactor(test-tests): Use pre API where possible; explicit check for none in BAL
* refactor(test-tests): Refactor opcode tests to bal opcodes test file

- Qu0b/fix pre alloc group enginex (ethereum#1911)

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(test-tests): BAL test for nested storage write reset same tx (ethereum#1854)

* fix(spec-specs): post-exec net-zero filtering post specs refactor

- refactor(spec-specs): Move net-zero filtering inside commit tx frame

* feat(test-tests): Expand BAL CALL opcode OOG boundary test cases (ethereum#1882)

* feat(test-tests): expand bal call opcode oog boundary tests

Parametrize for:

- value / no value
- COLD / WARM target
- 7702 delegation / no delegation
  - WARM / COLD delegation
- mem expansion / no mem expansion

Include tests both before and after state access to ensure BAL
expectations at these gas boundaries are met.

* refactor(tests): Use `fork.memory_expansion_gas_calculator()`

* feat(test-tests): Refactor; Add second 7702 boundary at success minus 1

* refactor: changes from comments on PR ethereum#1882

* fix: update test names and descriptions after refactor

* feat(spec): update eip7928 to latest rlp specs wrt storage; rename tx_index (ethereum#1912)

* feat(spec-test): Change storage RLP encoding to U256; tx_index rename

* fix: unit tests exception message

* fix(test-tests): Avoid hard-coding precompile range for lexicographic test

* feat(specs): EIP-7928 move bal from payload (ethereum#1917)

* feat(specs): EIP-7928 move bal from payload

* remove BAL from stf

* fix linter

* fix(test-tests): Use `ZeroPaddedHexNumber` instead of `HexNumber` for BALs (ethereum#1922)

* fix(test-tests): Use ZeroPaddedHexNumber instead of HexNumber for consistency

* chore(test-tests): add bal serialization roundtrip & 0-padded hex test (ethereum#33)

* refactor(test): Remove unnecessary instantiation of classes to pydantic types

---------

Co-authored-by: danceratopz <danceratopz@gmail.com>

* refactor(spec-specs): Refactor specs to be more coherent wrt gas acco… (ethereum#1897)

* refactor(spec-specs): Refactor specs to be more coherent wrt gas accounting

* feat(test): BAL test for call with value in static context

* feat(tests): add more 7928 test descriptions (ethereum#1815)

* feat(tests): add more 7928 test descriptions

* chore(test): remove test duplicated by test_bal_create_selfdestruct_to_self_with_call

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(tests): EIP-7928 tests targeting EIP-4788 (ethereum#1887)

* ✨ feat(tests): 7928x4788 tests

* 🧹 chore: Rename bal index

* ✨ feat: zero indexed tx

* 🥢 nit: Balance change for query contract

* 🥢 nit: Exclude system address from BAL

* 🥢 nit: Exclude system address from BAL

* 📄 docs: Update test description

---------

Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
Co-authored-by: felipe <fselmo2@gmail.com>

* feat(tests): add invalid BAL tests for spurious block_access_index (ethereum#1953)

* feat(tests): EIP-7928 tests targeting EIP-7002 (ethereum#1918)

* feat(test-tests): Add EIP-7002 BAL tests

🥢 nit:

✨ feat(tests): parameterised amount in clean sweep

✨ feat(tests): test_bal_7002_request_invalid

✨ feat(tests): test_bal_withdrawal_request_from_contract

✨ feat(tests): test_bal_7002_no_withdrawal_requests

♻️ refactor:

✨ feat(tests): parameter: validator key

✨ feat(tests): simplify

✨ feat(tests): test_bal_7002_partial_sweep

✨ feat(tests): test_bal_7002_clean_sweep

✨ feat: add more coverage

✨ feat:  test_bal_withdrawal_request_from_eoa

* fix(test-tests): lint

* chore: update test docstring to match case description and test behavior

* fix: balance_changes -> balance for post Accounts

---------

Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(tests): Test extraneous entries for BAL (ethereum#1992)

* 🧪 test(EIP-7928): test_bal_invalid_extraneous_entries

* 🥢 nit:

* chore: fix lint issues

---------

Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
Co-authored-by: fselmo <fselmo2@gmail.com>

* refactor(eip7928): refactor net zero filtering in BALs (ethereum#1899)

* refactor(eip7928): refactor net zero filtering in BALs

* refactor(eip7928): handle selfdestruct correctly

* feat(test): OOG and success selfdestruct tests to all precompiles

feat(test): Expand fork range for selfdestruct to precompile tests

- For successful tests, start at Homestead where precompiles were
  introduced (EIPs 196, 197, 198).

- For OOG tests, start at Tangerine where operation gas costs were
  introduced (EIP 150).

* refactor(test): `Tangerine` -> `TangerineWhistle`; comments on PR ethereum#1954

Bonus:

- fix(test): remove unnecessary isolation for enginex

* fix(tool): Fix EvmOneTransitionTool parsing for TangerineWhistle (add space)

* feat(test): Extend selfdestruct tests to all Amsterdam gas boundaries

* refactor(test): fork.supports_protected_txs() instead of direct comparison

- This will also help with support for any forks of this repo for L2s
  or other projects if some fork definitions don't have any meaningful
  relationship to SpuriousDragon.

* refactor: address comments from PR ethereum#1954

* feat(test): Add selfdestruct to system contracts + to self from initcode

* feat(test-commands): Allow pytest valid fork markers as params; add unit tests

* refactor(spec): Remove `check_gas` where unnecessary for instructions

* fix(test-fill): organize alloc groups by pytest param (enginex)

* fix(tests): remove bal from block body (ethereum#2017)

* tests(eip-7928): remove bal from block body

* fix(tests): clean up json_infra and genesis bal in block

* fix(tests): fix add_genesis_block empty bal hash

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(spec-tests): Update json_infra tests version (ethereum#1939)

* chore: clean up based on comments on PR ethereum#1719

- Add CHANGELOG entry

* tests(eip-7928): generalize eip-7934 tests (ethereum#2022)

* tests(eip-7928): generalize eip-7934 tests

* ci(eip-7928): run all amsterdam tests on py3 and pypy3

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* chore(spec-specs): fix typos in `src/ethereum/` (ethereum#1965)

Co-authored-by: Carson <carson@binarycake.ca>

* chore(ci): add all EL clients to hive master config (ethereum#2034)

* chore: fix PR template links to execution-specs (ethereum#2035)

* fix(docs): replace `master` with `mainnet` branch (ethereum#2037)

* feat(benchmarks): fix bytecode attack for EXT-like opcodes to work in Osaka (ethereum#1971)

* chore(tests,test-*,doc): remove eof from eest (ethereum#1873)

Co-authored-by: danceratopz <danceratopz@gmail.com>

* fix(tests-execute): relax pydantic checks on `GetPayloadResponse`

* chore(ci): skip redundant checks in workflows (ethereum#2038)

Co-authored-by: danceratopz <danceratopz@gmail.com>

* chore(testing/vm): Remove UndefinedOpcodes (ethereum#2044)

* chore(tooling): do not gitignore source files in `fixtures` packages (ethereum#2047)

* fix(tooling,test-*): enable project ruff config for packages/testing (ethereum#2046)

* fix(tooling): enable ruff config by inheriting from root pyproject.toml

* style(test-*): fix I001 unsorted-imports

* style(test-*): fix D413 missing-blank-line-after-last-section

* style(test-*): fix D213 multi-line-summary-second-line

* style(test-*): fix D400/D415 docstring punctuation

Add trailing periods to docstrings that were missing terminal punctuation.

* style(test-*): fix D101/D102/D103 missing docstrings

Add docstrings to GenesisState class and serialize_model method.
Add noqa comments for test functions where names are self-documenting.

* style(test-*): fix N801/N806 naming conventions

Rename uppercase variables in functions to lowercase per PEP8.
Add noqa for stub class that must match external library API.

* style(test-*): fix ARG001/ARG002/ARG003 unused arguments

Remove unused `fork` fixture parameters from test functions in
test_expect.py - pytest resolves these automatically via state_test.

Use `del` for arguments that cannot be removed:
- execution/base.py: Base class method signature for subclass overrides.
- execute/pre_alloc.py: Method override matching parent class signature.
- execute.py, filler.py: Pytest fixture parameters (fixture API contract).
- forks.py: pytest_collection_modifyitems hook signature (pytest API).
- benchmarking.py: Method overrides matching BenchmarkParametrizer interface.
- execution_specs.py: Method override matching TransitionTool.is_installed().

* style(test-*): fix E501 in base_types/

* style(test-*): fix E501 in tools/ and forks/

* style(test-*): fix E501 in specs/

* style(test-*): fix E501 in remaining packages

Fix line-too-long errors (E501, max 79 chars) in:
- conftest.py
- checklists/tests/test_checklist_template_consistency.py
- config/app.py
- exceptions/exceptions.py and exceptions/base.py
- execution/base.py, blob_transaction.py, transaction_post.py
- rpc/rpc.py, rpc_types.py, tests/test_types.py
- vm/tests/test_vm.py

* style(test-*): fix E501 in test_types/

* style(test-*): fix E501 in client_clis/

* style(test-cli): fix E501 in cli/ (excluging pytest plugins)

* style(test-cli): fix E501 in pytest_commands/plugins/consume

* style(test-cli): fix E501 in pytest_commands/plugins/filler

* style(test-cli): fix E501 in pytest_commands/plugins/execute

* style(test-cli): fix E501 in pytest_commands/plugins (misc)

* style(test-fill): remove duplicate return statement in checklist

* fix(test-types): avoid shadowing loop counter in block access list validation

Rename extracted variables from `actual_idx`/`expected_idx` to
`actual_ba_idx`/`expected_ba_idx` to avoid shadowing the outer loop
counter `actual_idx`.

Co-authored-by: spencer <spencer.tb@ethereum.org>

---------

Co-authored-by: spencer <spencer.tb@ethereum.org>

* fix(tools): fix remaining lint checks after large ruff refactor (ethereum#2050)

* feat(ci): Create Devnet Workflows (ethereum#2053)

* feat: Create devnet branch, rebase eip branch

* fixes

* fixes

* fix

* fixes

* remove types

* Update .github/actions/merge-eip-branches/action.yaml

Co-authored-by: spencer <spencer.tb@ethereum.org>

* Update .github/actions/rebase-eip-branch/action.yaml

Co-authored-by: spencer <spencer.tb@ethereum.org>

* Update .github/actions/merge-eip-branches/action.yaml

Co-authored-by: spencer <spencer.tb@ethereum.org>

* PR review feedback

* REMOTE env variable

* Nit: Change names

* fix

---------

Co-authored-by: spencer <spencer.tb@ethereum.org>

* feat(test): port static context static tests to python (ethereum#1960)

* feat(test): port static context static tests to python

Port STATICCALL tests with zero and non-zero value to precompiles

* feat(test): split into legacy test and high-level API test + parametrize
  - Inspired by comment: ethereum#1960 (comment)
  - Split the unreadable bytecode test from the comment where we can parametrize with all precompiles
  as well as with call_value = [0 and nonzero].

* chore: parametrize CREATE2 from Constantinople (where introduced)

* refactor: address comments from PR ethereum#1960

* feat(tests): Add BAL expectations for static call tests >=Amsterdam

* refactor(test): Update test name, add to BAL test_cases.md

* chore: convert to state_test

---------

Co-authored-by: Mario Vega <marioevz@gmail.com>

* feat(tests): turn on EIP-7934 tests with BALs (fill all for amsterdam) (ethereum#2058)

* refactor(spec): refactor `execute_code` into `process_message` (ethereum#2061)

* chore(spec-specs): backport changes

* refactor: align changes after cherry-pick; add to missing forks

- Align changes to process_message after cherry-pick
- Add changes to missing forks

---------

Co-authored-by: carsons-eels <carson@binarycake.ca>

* chore(docs): bump docs fork to amsterdam (ethereum#2064)

* bugfix(tests): Put BAL back into test fixtures for next bal release (ethereum#2066)

- BAL was removed from block body but we agreed to keep it in the fixtures
  for help with debugging against client BALs to spot diffs.

* chore(test-specs): fix fork transition tests (ethereum#2065)

* chore(test-specs): fix fork transition tests

* fix(test-forks): don't collect BPO tests w/ unchanged params on transition

- Use `fork.excess_blob_gas_calculator` to account for fork-specific
  blob gas calculations.

* refactor(test-forks): clearer definitions for transition forks

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* fix(tests): Remove bad opcode test; opt for test_all_opcodes coverage (ethereum#2070)

- Remove hard-coded static test for undefined opcode first byte filler.
  This was causing issues with introduced opcodes in later forks. opt
  for coverage via ``test_all_opcodes`` instead.

* feat(ci): Run static checks on all generated branches (ethereum#2071)

* feat(test-benchmark): Introduce create2 helper for address computation (ethereum#1996)

* refactor(test-tests): Port create collision tests (ethereum#2031)

* feat(tests): add BAL tests that dequeue consolidations (ethereum#2076)

* fix(tests): fix EIP-7934 tests logic accuracy (ethereum#2078)

* refactor(tests): refactor to less error prone logic for eip7934 tests

* refactor(tests): performance gain linear search -> binary search

* feat(tests): perf gain, find a tx that is within +/- 15 bytes not 1 byte

- extradata field is 32 bytes so we can adjust using the block's extradata
  up to +/- 15 bytes or so (we will need to add one more for rlp at limit
  + 1 byte invalid tests). This makes it so we should selfomly even hit the
  binary search logic.

* refactor(tests): Get rid of dead binary search code; new tolerance does the job

* fix(tests): fix typo - use consolidation requests

* refactor(tests): cleanup from comments on PR ethereum#2078

* feat(test-cli): add `hasher compare` subcommand (ethereum#2080)

* feat(test-cli): add hasher compare subcommand

* test(test-cli): add unit tests for hasher

* refactor(test-cli): remove dead code and redundant comments

- Remove unused HashableItem.print() method.
- Remove obvious inline comments that duplicate code intent.
- Simplify multi-line type annotation for differences list.

* refactor(test-cli): simplify compare by diffing trees directly

- Replace parse_hash_lines() with collect_hashes() that walks item tree.
- Simplify display_diff() to work with dicts instead of parsing strings.
- Eliminate round-trip: format → parse → diff is now just collect → diff.

* fix(tests): update nethermind exceptions (ethereum#2098)

* feat(test-fill): speed up filling (ethereum#2079)

* feat(test-fill): Build index incrementally, not at the end of fill
* perf(test): defer index model validation
* perf(tests): O(n²) to O(n) trie-building approach for perf
* perf(test-fill): Use --no-html; releases don't publish these (needless overhead)
* refactor: cleanup; add more hasher compat tests
* refactor(perf): validate at IndexFile once, not at every single file
* feat(perf): distribute slow-marked tests early to runners; avoid long tail
- mark more slow tests
* refactor: changes from comments on PR ethereum#2079
* chore(ci): show the slowest 50 tests on every py3 run
* refactor(perf): pre-serialize fixture JSON while workers parallelize
* refactor(perf): write partial JSON fixture files + merge at end
- xdist workers were writing to the same fixture JSON file causing O(n²) work...
  each worker had to read, parse, and rewrite all previous entries.

- now workers write to their own partial JSONL file (append-only, O(1))
  - test_blob_txs.partial.gw0.jsonl
  - test_blob_txs.partial.gw1.jsonl
  - etc.
  .. and at session end, ``merge_partial_fixture_files()`` combines all partials
  into the final JSON file

Test teardown on some tests dropped from ~80s to ~1s

* fix: remove pre-serialization small win to help pypy runs

* fix(test-benchmark): support `blobhash` benchmark (ethereum#2067)

* fix: failing blobhash test

* refactor: update blobhash benchmark

* feat(testing/fixtures): Add logs to state fixtures (ethereum#2091)

* feat(testing/specs): Add receipt, including log list, to state fixture

* fix

* feat(test-specs): add transaction log verification support

* fix(testing): unit test expectations

* fix: tox -e static

* feat(testing/tests): Add log unit test

* feat(test): Add receipts to blockchain_tests to help debug root mismatches (#5)

* refactor(specs/testing): gasUsed -> cumulativeGasUsed

* refactor: Add RLP to tx receipts and use proper fields

---------

Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
Co-authored-by: felipe <fselmo2@gmail.com>

* refactor(test-benchmark): update benchmark fork to Osaka (ethereum#2104)

* refactor: cold access storage operations

* chore: bump forks to osaka

* fix(test,benchmark): cap data tests to rlp block limit

* chore: apply suggested changes

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* doc(test-benchmark): framework description and developer guideline (ethereum#2100)

* doc: benchmark description

* fix: doc linting issue

* feat(test-benchmark): add EIP-7825 tx splitting and fix & include stubs.json (ethereum#2112)

* enhance(bloatnet): add EIP-7825 transaction splitting support

Add support for EIP-7825 transaction gas limit cap (16M gas) to bloatnet
benchmark tests. When gas_benchmark_value exceeds tx_gas_limit, tests now
automatically split into multiple transactions.

Changes:
- Add tx_gas_limit fixture parameter to all bloatnet test functions
- Calculate num_txs based on gas_benchmark_value / tx_gas_limit
- Split attack contracts across multiple transactions with proper
  iteration count distribution
- Track salt_offset for factory-based tests to ensure unique contract
  addresses across transactions

This ensures bloatnet tests work correctly with gas values > 16M while
maintaining EIP-7825 compliance.

* enhance(bloatnet): add stubs.json with corrected token addresses

Add stubs.json mapping test names to mainnet ERC-20 contract addresses:
- 297 entries for 99 unique tokens (excluding 30GB_ERC20)
- Fixed 22 incorrect addresses (ALT, AOA, cETH, CHZ, CRO, ENA, ETHFI,
  GTC, IMT, IMX, KOK, LEND, LOOKS, LYM, MITx, Monfter/Monavale, ONDO,
  POLY, WEPE, ZETA, ZSC)
- Removed WELL token (doesn't exist on Ethereum mainnet)
- All addresses verified to have deployed code via eth_getCode

* fix(bloatnet): fix line length violations for ruff linter

* fix(bloatnet): apply ruff format to ternary expressions

Collapse ternary expressions to single lines as required by ruff format.

* fix(test,hive): Add hive ruleset BPO2ToAmsterdamAtTime15k (ethereum#2111)

* chore(pyproject): declare Python 3.12 support in package metadata (ethereum#1888)

Add the Python 3.12 classifier to project metadata to reflect support
for Python >=3.11 on modern interpreters.

* chore(test-benchmark): skip rlp size limit check (ethereum#2118)

* fix(fixtures): stream fixture JSON writes to reduce peak memory. (ethereum#2124)

- Write merged fixture JSON entries directly to file instead of
  building the full output string in memory via `"".join(parts)`.
- Avoids OOM during `merge_partial_fixture_files()` for large fixtures.

* fix(test-fill): improve memory buildup for fill; merge on `SIGINT` / `SIGTERM` (ethereum#2117)

* fix(test-fill): Merge partial fixtures on ``KeyboardInterrupt``

* feat(test-fill): Merge partial fixtures on ``SIGTERM``

* performance: stream fixture and index writes to disk; prevent memory bloat

* fix(test-fill): merge indexes on `SIGINT` / `SIGTERM`

* fix: add hotfix for `--verify-fixtures`, has been broken for some time.

* Add BlockException.GAS_USED_OVERFLOW to BesuExceptionMapper (ethereum#2126)

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* fix(test): lint (ethereum#2128)

* chore(tests): use representative blob combos in high blob count forks (ethereum#2127)

* chore(tests): use representative blob combinations for EIP-4844 high-blob forks

* fix: tox

* fix: test IDs

---------

Co-authored-by: Mario Vega <marioevz@gmail.com>

* feat(benchmark/tests): Extra sstore benchmark tests (ethereum#2130)

* fix(test-fill): use k-way merge for fixture json to reduce memory footprint (ethereum#2131)

* fix(test-fill): don't load all partials into memory at once when merging

* feat(test): add durations and reduce workers for benchmark feature runs

* feat(tools): retry rpc calls on server-side error (ethereum#2056)

* feat(test-fill): performance improvements for release processes and fill (ethereum#2140)

* chore(test-fil): attempt dist=worksteal for benchmark release

* fix(test-fill): fix exponential hanging in phase 1 due to multiple state root calcs

* feat(test-fill): more performance updates for filling

- hasher.py:     O(n²) → O(n) byte concatenation fix
                 (bytes are immutable + recreated instead of mutated)
- gen_index.py:  2-pass streaming (less memory, 2x I/O)
- collector.py:  Simplified dict-based merge
- filler.py:      Timing instrumentation to debug where time is spent

* feat(tool): Speed up tarball creation for releases using pigz if available

- Use pigz if available, otherwise use gzip as before

* feat(test,fill): add --durations to release runs; some tests are holding workers

* fix(test-fill): garbage collect at each worker session finish to prevent buildup

* fix: Minor fixes from claude PR review

* feat(test-benchmark): add gas limit check for BLS12_G2_MSM benchmark (ethereum#2143)

* fix(test-ci): Fix benchmark artifact expectation for new builder prealloc (ethereum#2142)

* refactor(testing): Implement IteratingBytecode, FixedIterationsBytecode (ethereum#2030)

* feat(test-benchmark): updates and fixes for fixed opcode count (ethereum#1985)

* fix(docs): add missing lines code coverage field to eip checklist (ethereum#2137)

* fix(docs): docs ci build failed due to being in strict mode and emitting warning from missing field in eip-checking-template

* fix: disable strict mode for building docs, only errors should lead to ci failure

* fix: info warnings about missing navigation elements that spam ci output

* PR feedback

* test(benchmark): skip test_blockhash pending investigation (ethereum#2145)

* chore(ci): only fill native test formats in tox's `pypy3` env (ethereum#2116)

* chore(ci): don't fill derived test formats in the pypy3 tox env

This means that only the native test format used by the test will be generated; all derived fixture formats get skipped, e.g., `blockchain_test_engine` and `blockchain_test_from_state_test` won't get generated.

* chore(ci): only fill amsterdam in pypy3 tox env

* chore(ci,tooling): enable --until Amsterdam for pypy3

* fix(tests/benchmark): Max size contract deployment execution (ethereum#2149)

* fix(tests/benchmark): Max size contract deployment execution

* fix

* fix(test-fill): cache address, don't re-calculate every time; very expensive

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* fix(test-ci): fix issues with recent changes to checklist (ethereum#2151)

* feat(tests): BAL tests for 7702 delegation reset, create and access (ethereum#2097)

* feat(tests): test 7702 double auth reset for self_funded tx

test_bal_7702_double_auth_reset_minimal and test_bal_7702_double_auth_reset in the test cases markdown are essentially the same test with varying parameters. The commit de-duplicates the entries and implements the missing case

* feat(tests): test 7702 delegation with CREATE

* feat(tests): test 7702 delegation access

* fix(tests): post review updates

* feat(test-vm): Update MSTORE macro to use gas-accounting metadata

* chore(test): remove duplicated test case covered under test_bal_call_7702_delegation_and_oog

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(tests): add warm and cold account query benchmark (ethereum#2138)

* fix(benchmark): reduce stateful stubs to 4 representative tokens (ethereum#2141)

* docs: Update package names from ethereum_test_* to execution_testing.* (ethereum#1793)

* docs: update package names from ethereum_test_* to execution_testing.*

Update documentation to reflect package renaming from ethereum_test_* to
execution_testing.* namespace (follow-up to PR ethereum#1654).

Changes:
- Update module references in eip_testing_checklist_template.md
- Update directory structure in repository_overview.md

All module references now use the unified execution_testing.* namespace.

* chore: hotfix for getting started docs update post-weld

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(benchmarks): add keccak benchmark with updated memory (ethereum#1849)

* feat(benchmarks): add keccak benchmark with updated memory

* chore: fix lint

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* feat(tests): add test case for create2 selfdestruct and recreate (ethereum#2121)

* feat(tests): add test case for create2 selfdestruct and recreate

* chore: update test with parametrization for first CREATE and pre-existing balance

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* refactor(spec-tool): remove unused fields (ethereum#2105)

* refactor: remove unused Load._network and _fork_module

* refactor: remove unused Load._network and _fork_module

* chore: fix lint, removing unused network field and param from call

---------

Co-authored-by: fselmo <fselmo2@gmail.com>

* chore(tooling): add initial claude config and skills (ethereum#2024)

Co-authored-by: Felipe Selmo <fselmo2@gmail.com>

* chore(test-client-clis): add Nethermind exception for `BlockException.GAS_USED_OVERFLOW` (ethereum#2165)

Co-authored-by: danceratopz <danceratopz@gmail.com>

* fix(testing/execute): Phase not being correctly passed as tx request ID (ethereum#2161)

* fix(testing/execute): Phase not being correctly passed as tx request id

* fix(benchmarks): wrap code-generator transactions in execution phase context

* Revert "fix(benchmarks): wrap code-generator transactions in execution phase context"

This reverts commit 90a8418.

* fix(benchmarks): default unmarked transactions to execution phase

---------

Co-authored-by: spencer-tb <spencer.tb@ethereum.org>

* refactor(test-benchmark): failing `sstore` / `sload` benchmark cases (ethereum#2147)

* temp

* temp

* refactor: benchmark test

* fix: linting issue

* refactor: optimize performance

* fix(test-benchmark): create sstore initializer loop

---------

Co-authored-by: spencer <spencer.tb@ethereum.org>

* feat: enhance keccak benchmark (ethereum#2152)

* Port upstream grammar fixes and interpreter refactoring to monad forks

Co-Authored-By: Claude claude-opus-4-6

* Revert adding new gh actions & workflows

This reverts from commit 2fc0504.

* Fix mypy error from shadowed except variable

Co-Authored-By: Claude claude-opus-4-6

---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Co-authored-by: spencer <spencer.taylor-brown@ethereum.org>
Co-authored-by: 蔡佳誠 Louis Tsai <72684086+LouisTsai-Csie@users.noreply.github.com>
Co-authored-by: danceratopz <danceratopz@gmail.com>
Co-authored-by: felix <felix314159@users.noreply.github.com>
Co-authored-by: felipe <fselmo2@gmail.com>
Co-authored-by: CPerezz <37264926+CPerezz@users.noreply.github.com>
Co-authored-by: Mario Vega <marioevz@gmail.com>
Co-authored-by: Toni Wahrstätter <51536394+nerolation@users.noreply.github.com>
Co-authored-by: Toni Wahrstätter <info@toniwahrstaetter.com>
Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
Co-authored-by: Stefan <stefan@starflinger.eu>
Co-authored-by: Guruprasad Kamath <48196632+gurukamath@users.noreply.github.com>
Co-authored-by: Stefan <22667037+qu0b@users.noreply.github.com>
Co-authored-by: raxhvl <10168946+raxhvl@users.noreply.github.com>
Co-authored-by: Carson <carson@binarycake.ca>
Co-authored-by: Ignacio Hagopian <jsign.uy@gmail.com>
Co-authored-by: spencer <spencer.tb@ethereum.org>
Co-authored-by: Paweł Bylica <pawel@hepcolgum.band>
Co-authored-by: Alexey Osipov <me@flcl.me>
Co-authored-by: talhaaktss <talhaaktas147@hotmail.com>
Co-authored-by: daniellehrner <daniel.lehrner@consensys.net>
Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com>
Co-authored-by: XaxaxaX <aryanpatil2703@gmail.com>
Co-authored-by: Jochem Brouwer <jochembrouwer96@gmail.com>
Co-authored-by: Galoretka <galoretochka@gmail.com>
Co-authored-by: Ben {chmark} Adams <thundercat@illyriad.co.uk>
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.

3 participants