Skip to content

Conversation

@pdobacz
Copy link
Collaborator

@pdobacz pdobacz commented Feb 12, 2026

No description provided.

spencer-tb and others added 30 commits January 13, 2026 16:16
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(testing/vm): Implement bytecode gas calc

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

* refactor: Renames, tox fixes
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

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

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

---------

Co-authored-by: Toni Wahrstätter <[email protected]>
Co-authored-by: Toni Wahrstätter <[email protected]>
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
…1743)

- Perform a similar check to balance changes and other
  tracker methods and keep only the last write.
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.
 - 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
Galoretka and others added 28 commits February 6, 2026 17:00
* 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 <[email protected]>
…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 <[email protected]>
…thereum#2147)

* temp

* temp

* refactor: benchmark test

* fix: linting issue

* refactor: optimize performance

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

---------

Co-authored-by: spencer <[email protected]>
)

* refactor(tests): Add fork parameter to Initcode generator

Initcode class now uses fork-specific gas costs and memory expansion
formula instead of hardcoded values.

Co-Authored-By: Claude Opus 4.5

* Fixes after review

Co-authored-by: Mario Vega <[email protected]>

---------

Co-authored-by: Mario Vega <[email protected]>
Co-Authored-By: Claude claude-opus-4-6
* fix(tests): EIP-7883 modexp - fix gas formula

* fix(tests): EIP-7883 use old spec at Osaka siblings

* Fixup comment & gas formula after review
…reum#2182)

* refactor(bloatnet): split stubs.json into mainnet and bloatnet variants

Separate stub mappings so mainnet-only benchmarks (XEN, USDC, IMT, STR)
use stubs_mainnet.json while bloatnet benchmarks (including 30GB_ERC20)
use stubs_bloatnet.json.

* fix: update file name

---------

Co-authored-by: LouisTsai <[email protected]>
* feat(testing/fill): Account-hash-based deploy addresses

* fix(testing): Allow EOAs to have code for collisions

* fix(tests): All tests using pre.fund_address

* fix(tests): Tests setting EOA code

* fixes

* Fixes

* Add correct markers to all tests

* fix(testing): test generator use appropriate mark

* fix(testing/filler): Logic

* refactor(tests): Remove most pre-alloc-group markers

* feat(filler): Make pre-alloc auto-groupable

* fix: bug, add unit test

* refactor: Remove `pre_fund_address` marker

* refactor: Remove extra flags

* fix: execute

* refactor: Move helper methods

* fix: Separators

* fix: Static tests

* fix: Tox, review comments

* fix(tests): Mark test_creates_collisions

* Update tests/prague/eip7702_set_code_tx/test_set_code_txs.py

Co-authored-by: felipe <[email protected]>

* fix: `pre.fund_address`

---------

Co-authored-by: felipe <[email protected]>
* feat(testing/vm): Cache bytecode's keccak

* feat(testing/vm): Cache bytecode gas cost/refund

* feat(tests/benchmark): Cache created contract address

* feat(tests/benchmarking): Cache access list

* refactor: refactor caching with module-level ``@cache``

---------

Co-authored-by: fselmo <[email protected]>
* chore: update style guidelines

* Apply suggestion from @fselmo

Co-authored-by: felipe <[email protected]>

---------

Co-authored-by: felipe <[email protected]>
…s_cost(fork)` (ethereum#2186)

* refactor(test-tests): migrate amsterdam gas costs to use `bytecode.gas_cost(fork)`

* chore(test): DRY metadata gascost refactor

---------

Co-authored-by: fselmo <[email protected]>
…gas_cost(fork)` (ethereum#2191)

* refactor(test-tests): migrate cancun to osaka gas costs to use `bytecode.gas_cost(fork)`

* chore: Remove redundant `Bytecode` wrapping

* chore: Remove one redundant `Bytecode` wrapping

* fix: Hardcoded fork

* Update tests/osaka/eip7825_transaction_gas_limit_cap/test_tx_gas_limit.py

---------

Co-authored-by: Mario Vega <[email protected]>
…reum#2193)

* Add BlockException.GAS_USED_OVERFLOW mapping to ethrex exception mapper

ethrex now returns "Block gas used overflow..." for EIP-7778
pre-refund gas accounting failures (Amsterdam+), distinct from the
existing "Gas allowance exceeded..." transaction-level error.

* Add BAL exception mappings to ethrex exception mapper

Add mappings for Block Access List (EIP-7928) related exceptions:
- INVALID_BLOCK_ACCESS_LIST
- INVALID_BAL_HASH
- INVALID_BAL_EXTRA_ACCOUNT
- INVALID_BAL_MISSING_ACCOUNT
- INCORRECT_BLOCK_FORMAT

ethrex validates BAL by computing the hash and comparing against the
header, so all BAL corruption types produce the same hash mismatch
error. Additionally, index-out-of-bounds and RLP decode errors are
mapped for INVALID_BLOCK_ACCESS_LIST and INCORRECT_BLOCK_FORMAT.
…in CI (ethereum#2120)

* chore(tooling,ci): remove maxprocesses for py3 tox env

* chore(tooling,ci): throttle xdist workers locally, use all cores in CI

Replace `-n auto` with `-n {env:PYTEST_XDIST_AUTO_NUM_WORKERS:6}` in
py3 and tests_pytest_py3 tox envs. Defaults to 6 workers locally to
avoid deadlocks; CI sets the env var to `auto` for full core usage.
Removes the now-redundant `--maxprocesses` flag.

* chore(deps,ci,tooling): add `psutil` to dev deps to count physical cores

Without `psutil` pytest-xdist reports the number of logical cores.

* chore(tooling): document why py3 uses --dist=loadgroup
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.