Changelog¶
Test fixtures for use by clients are available for each release on the Github releases page.
Key: โจ = New, ๐ = Fixed, ๐ = Changed. ๐ฅ = Breaking
๐ [Unreleased]¶
๐ฅ Breaking Change¶
Consume engine strict exception checking¶
consume engine now checks exceptions returned by the execution clients in their Engine API responses, specifically in the validationErrorfield of the engine_newPayloadVX method.
While not strictly a breaking change since tests will continue to run normally, failures are expected if a client modifies their exception messages.
This feature can be disabled by using --disable-strict-exception-matching for specific clients or forks.
๐ ๏ธ Framework¶
fill¶
- โจ The
static_fillerplug-in now has support for static state tests (from GeneralStateTests) (#1362). - โจ Introduce
pytest.mark.exception_testto mark tests that contain an invalid transaction or block (#1436). - ๐ Fix
DeprecationWarning: Pickle, copy, and deepcopy support will be removed from itertools in Python 3.14.by avoiding useitertoolsobject in the specBaseTestpydantic model (#1414).
consume¶
- ๐ Fix fixture tarball downloading with regular, non-Github release URLS and with numerical versions in regular release specs, e.g.,
[email protected](#1437). - โจ
consume enginenow has strict exception mapping enabled by default (#1416).
Tools¶
- ๐
generate_system_contract_deploy_testtest generator has been updated to handle system contracts that are not allowed to be absent when the fork happens (#1394). - โจ Add
generate_system_contract_error_testto generate tests on system contracts that invalidate a block in case of error (#1394).
Exceptions¶
- โจ
BlockException.SYSTEM_CONTRACT_EMPTY: Raised when a required system contract was not found in the state by the time it was due to execution with a system transaction call (#1394). - โจ
BlockException.SYSTEM_CONTRACT_CALL_FAILED: Raised when a system contract call made by a system transaction fails (#1394). - โจ
BlockException.INVALID_BLOCK_HASH: Raised when the calculated block hash does not match the expectation (Currently only during Engine API calls) (#1416). - โจ
BlockException.INVALID_VERSIONED_HASHES: Raised when a discrepancy is found between versioned hashes in the payload and the ones found in the transactions (#1416).
๐งช Test Cases¶
- โจ EIP-7702: Test precompile case in same transaction as delegation without extra gas in case of precompile code execution; parametrize all call opcodes in existing precompile test (#1431).
- โจ EIP-7702: Add invalid nonce authorizations tests for the case of multiple signers when the sender's nonce gets increased (#1441).
- โจ EIP-7702: Add a test that verifies that set code transactions are correctly rejected before Prague activation (#1463).
- โจ EIP-7623: Additionally parametrize transaction validity tests with the
toset to an EOA account (previously only contracts) (#1422). - โจ EIP-7251: Add EIP-7251 test cases for modified consolidations contract that allows more consolidations (#1465).
- โจ EIP-6110: Add extra deposit request edge cases, sending eth to the deposit contract while sending a deposit request (#1467).
- โจ EIP-6110: Add cases for deposit log layout and other topics (ERC-20) transfer (#1371).
- โจ EIP-7251: Remove pytest skips for consolidation request cases (#1449).
- โจ EIP-7002, EIP-7251: Add cases to verify behavior of contracts missing at fork (#1394).
- โจ EIP-7002, EIP-7251: Add cases to verify behavior of system contract errors invalidating a block (#1394).
- ๐ Remove EIP-7698: EIP has been removed and the tests related to it have also been removed, while preserving a subset of the tests to verify that functionality is removed in clients (#1451).
๐ Misc¶
- ๐ Configure
markdownlintto expect an indent of 4 with unordered lists (otherwise HTML documentation is rendered incorrectly, #1460). - ๐ Update
eels_resolutions.jsonto point to temporary commitbb0eb750d643ced0ebf5dec732cdd23558d0b7f2, which is based onforks/praguebranch, commitd9a7ee24db359aacecd636349b4f3ac95a4a6e71, with PRs execution-specs#1182, execution-specs#1183 and execution-specs#1191 merged (#1394).
v4.2.0 - 2025-04-08¶
Note: Although not a breaking change, consume users should delete the cache directory (typically located at ~/.cache/ethereum-execution-spec-tests) used to store downloaded fixture release tarballs. This release adds support for ethereum/tests and ethereum/legacytests fixture release downloads and the structure of the cache directory has been updated to accommodate this change.
To try this feature:
consume direct --input=https://github.com/ethereum/tests/releases/download/v17.0/fixtures_blockchain_tests.tgz
To determine the cache directory location, see the --cache-folder entry from the command:
consume cache --help
๐ฅ Breaking Change¶
๐ ๏ธ Framework¶
consume¶
- โจ Add support for ethereum/tests and ethereum/legacytests release tarball download via URL to the
--inputflag ofconsumecommands (#1306). - โจ Add support for Nethermind's
nethtestcommand toconsume direct(#1250). - โจ Allow filtering of test cases by fork via pytest marks (e.g.,
-m "Cancun or Prague") (#1304, #1318). - โจ Allow filtering of test cases by fixture format via pytest marks (e.g.,
-m blockchain_test) (#1314). - โจ Add top-level entries
forksandfixture_formatsto the index file that list all the forks and fixture formats used in the indexed fixtures (#1318). - โจ Enable logging from
consumecommands (#1361). - โจ Propagate stdout and stderr (including logs) captured during test execution to the Hive test result (#1361).
- ๐ Don't parametrize tests for unsupported fixture formats; improve
consumetest collection (#1315). - ๐ Fix the the hive command printed in test reports to reproduce tests in isolation by prefixing the
--sim.limitflag value withid:(#1333). - ๐ Improve index generation of ethereum/tests fixtures: Allow generation at any directory level and include
generatedTestHashin the index file for thefixture_hash(#1303). - ๐ Fix loading of ethereum/tests and ethereum/legacytests fixtures for the case of mixed
0x0and0x1transaction types in multi-index (data,gas,value) state test fixtures (#1330). - โจ Add Osaka to the hive ruleset, includes a small ruleset refactor (#1355).
fill¶
- ๐ Fix
--fork/from/untilfor transition forks when usingfill#1311. - ๐ Fix the node id for state tests marked by transition forks (#1313).
- โจ Add
static_fillerplug-in which allows to fill static YAML and JSON tests (from ethereum/tests) by adding flag--fill-static-teststouv run fill(#1336).
execute¶
- ๐ Test IDs have changed to include the name of the test spec where the test came from (e.g.
state_test,blockchain_test, etc) (#1367). - โจ Markers can now be used to execute only tests from a specific test spec type (e.g.
-m state_test,-m blockchain_test, etc) (#1367).
๐ Misc¶
- ๐ Bump the version of
execution-specsused by the framework to the packageethereum-execution==1.17.0rc6.dev1; bump the version used for test fixture generation for forks < Prague to currentexecution-specsmaster, fa847a0 (#1310). - ๐ Init
TransitionToolinGethTransitionTool(#1276). - ๐ Refactored RLP encoding of test objects to allow automatic generation of tests (#1359).
- โจ Document how to manage
execution-spec-testspackage dependencies (#1388).
Packaging¶
- ๐ Fix
eest make testwhenethereum-execution-spec-testsis installed as a package (#1342). - ๐ Pin
setuptoolsandwheelin[build-system], bumptrie>=3.1and removesetuptoolsfrom package dependencies (#1345, #1351).
๐งช Test Cases¶
- โจ Add additional test coverage for EIP-152 Blake2 precompiles (#1244). Refactor to add variables for spec constants and common fixture code. (#1395), (#1405).
- โจ Add EIP-7702 incorrect-rlp-encoding tests (#1347).
- โจ Add EIP-2935 tests for all call opcodes (#1379).
- โจ Add more tests for EIP-7702: max-fee-per-gas verification, delegation-designation as initcode tests (#1372).
v4.1.0 - 2025-03-11¶
๐ฅ Breaking Changes¶
The following changes may be potentially breaking (all clients were tested with these changes with the state test format, but not the blockchain test format):
- ๐ฅ Add a
yParityfield (that duplicatesv) to transaction authorization tuples in fixture formats to have fields that conform to EIP-7702 spec, resolves erigontech/erigon#14073 (#1286). - ๐ฅ Rename the recently introduced
_infofieldfixture_formattofixture-formatfor consistency #1295.
๐ ๏ธ Framework¶
- ๐ Make
BaseFixtureable to parse any fixture format such asBlockchainFixture(#1210). - โจ Blockchain and Blockchain-Engine tests now have a marker to specify that they were generated from a state test, which can be used with
-m blockchain_test_from_state_testand-m blockchain_test_engine_from_state_testrespectively (#1220). - โจ Blockchain and Blockchain-Engine tests that were generated from a state test now have
blockchain_test_from_state_testorblockchain_test_engine_from_state_testas part of their test IDs (#1220). - ๐ Refactor
ethereum_test_fixturesandethereum_clisto createFixtureConsumerandFixtureConsumerToolclasses which abstract away the consumption process used byconsume direct(#935). - โจ Allow
consume direct --collect-onlywithout specifying a fixture consumer binary on the command-line (#1237). - โจ Allow
fill --collect-onlywithout the need for existence of the folder `./fixtures' - โจ Report the (resolved) fixture tarball URL and local fixture cache directory when
consume's--inputflag is a release spec or URL (#1239). - โจ EOF Container validation tests (
eof_test) now generate container deployment state tests, by wrapping the EOF container in an init-container and sending a deploy transaction (#783, #1233). - โจ Use regexes for Hive's
--sim.limitargument and don't use xdist if--sim.parallelism==1in theeest/consume-rlpandeest/consume-rlpsimulators (#1220). - ๐ Register generated test markers, e.g.,
blockchain_test_from_state_test, to prevent test session warnings (#1238, #1245). - ๐ Zero-pad
Environmentfields passed tot8ntools as required byevmone-t8n(#1268).
๐ Misc¶
- โจ Add a guide to the docs for porting tests from
ethereum/teststo EEST (#1165). - โจ Improve the
uv run eest make testinteractive CLI to enable creation of new test modules within existing test sub-folders (#1241). - โจ Update
mypyto latest release>=1.15.0,<1.16(#1209). - ๐ Bug fix for filling with EELS for certain Python versions due to an issue with CPython (#1231).
- ๐ Fix HTML site deployment due to the site's index file exceeding Github's max file size limit (#1292).
- โจ Update the build fixtures workflow to use multiple self-hosted runners, remove
pectra-devnet-6feature build (#1296).
๐งช Test Cases¶
- โจ Add gas cost of delegation access in CALL opcode (#1208).
- โจ Add EIP-7698 failed nonce and short data tests (#1211).
- โจ Add EIP-2537 additional pairing precompile tests cases, and then update all BLS12 test vectors (#1275, #1289).
- โจ Add EIP-7685 and EIP-7002 test cases for additional request type combinations and modified withdrawal contract that allows more withdrawals (#1340).
v4.0.0 - 2025-02-14 - ๐¶
๐ Fixture Releases¶
- ๐ Initially we moved old fork configured tests within stable and develop fixture releases to a separate legacy release (#788).
- ๐ This was later reverted after some client teams preferred to keep them in all in the same releases (#1053).
๐ฅ Breaking Change¶
- โจ Use uv for package management replacing pip (#777).
- โจ Ruff now replaces Flake8, Isort and Black resulting in significant changes to the entire code base including its usage (#922).
- ๐ Fill test fixtures using EELS by default. EEST now uses the
ethereum-specs-evm-resolverwith the EELS daemon (#792). - ๐ The EOF fixture format contained in
eof_testsmay now contain multiple exceptions in the"exception"field in the form of a pipe (|) separated string (#759). - ๐
state_test,blockchain_testandblockchain_test_enginefixtures now contain aconfigfield, which contains an object that contains ablobSchedulefield. On theblockchain_testandblockchain_test_enginefixtures, the object also contains a duplicate of thenetworkroot field. The root'snetworkfield will be eventually deprecated (#1040). - ๐
latest-stable-releaseandlatest-develop-releasekeywords for the--inputflag in consume commands have been replaced withstable@latestanddevelop@latestrespectively (#1044).
๐ ๏ธ Framework¶
- โจ Execute command added to run existing tests in live networks (#).
- ๐ Fixed consume hive commands from spawning different hive test suites during the same test execution when using xdist (#712).
- โจ
consume hivecommand is now available to run all types of hive tests (#712). - โจ Generated fixtures now contain the test index
index.jsonby default (#716). - โจ A metadata folder
.meta/now stores all fixture metadata files by default (#721). - ๐ Fixed
fillcommand index generation issue due to concurrency (#725). - โจ Added
with_all_evm_code_types,with_all_call_opcodesandwith_all_create_opcodesmarkers, which allow automatic parametrization of tests to EOF (#610, #739). - โจ Added
with_all_system_contractsmarker, which helps parametrize tests with all contracts that affect the chain on a system level (#739). - โจ Code generators
ConditionalandSwitchnow support EOF by adding parameterevm_code_type(#610). - โจ
fillcommand now supports parameter--evm-code-typethat can be (currently) set tolegacyoreof_v1to force all test smart contracts to deployed in normal or in EOF containers (#610). - ๐ Fixed fixture index generation on EOF tests (#728).
- ๐ Fixes consume genesis mismatch exception for hive based simulators (#734).
- โจ Adds reproducible consume commands to hiveview (#717).
- ๐ฅ Added multiple exceptions to the EOF fixture format (#759).
- โจ Added optional parameter to all
with_all_*markers to specify a lambda function that filters the parametrized values (#739). - โจ Added
extend_with_defaultsutility function, which helps extend test case parameter sets with default values.@pytest.mark.parametrize(#739). - โจ Added
Container.Inittoethereum_test_types.EOF.V1package, which allows generation of an EOF init container more easily (#739). - โจ Introduce method valid_opcodes() to the fork class (#748).
- ๐ Fixed
consumeexit code return values, ensuring that pytest's return value is correctly propagated to the shell. This allows the shell to accurately reflect the test results (e.g., failures) based on the pytest exit code (#765). - โจ Added a new flag
--solc-versionto thefillcommand, which allows the user to specify the version of the Solidity compiler to use when compiling Yul source code; this version will now be automatically downloaded byfillviasolc-select(#772). - ๐ Fix usage of multiple
@pytest.mark.with_all*markers which shared parameters, such aswith_all_call_opcodesandwith_all_create_opcodeswhich sharedevm_code_type, and now only parametrize compatible values (#762). - โจ Added
selectorandmarksfields to all@pytest.mark.with_all*markers, which allows passing lambda functions to select or mark specific parametrized values (see documentation for more information) (#762). - โจ Improves consume input flags for develop and stable fixture releases, fixes
--helpflag for consume (#745). - ๐ Return exit-code from
consumecommands (#766). - ๐ Remove duplicate EOF container tests, automatically check for duplicates (#800).
- ๐ Fix DATALOAD
pushed_stack_itemscalculation (#784). - โจ Add
evm_bytesrename and print asm (#844). - ๐ Use the
session_temp_folderintroduced in #824 (#845). - ๐ Don't treat eels resolutions as a fixture (#878).
- โจ Emphasize that no tests were executed during a fill pytest session (#887).
- ๐ Move generic code from TransitionTool to a new generic base class EthereumCLI (#894).
- ๐ Fix erroneous fork mes- ๐ Fix max stack height calculation (#810).
- โจ Add storage key hint in Storage class (#917).
- โจ Add system to verify exception strings (#795).
- ๐ Fix
FixedBytesassignment rules (#1010). - ๐ Fix
Addresspadding options (#1113). - ๐ Add
Container.expected_bytecodeoptional parameter (#737). - โจ Add support for
initcode_prefixon EOFContainer.Init(#819).sage in pytest session header with development forks (#806). - ๐ Fix
Conditionalcode generator in EOF mode (#821). - ๐ Ensure that
Blockobjects keep track of theirfork, for example, when the block'srlp_modifieris notNone(#854). - ๐
ethereum_test_rpclibrary has been created with what was previouslyethereum_test_tools.rpc(#822). - โจ Add
Weitype toethereum_test_base_typeswhich allows parsing wei amounts from strings like "1 ether", "1000 wei", "10**2 gwei", etc (#825). - โจ Pin EELS versions in
eels_resolutions.jsonand include this file in fixture releases (#872). - ๐ Replace
ethereum.base_typeswithethereum-types(#850). - ๐ฅ Rename the
PragueEIP7692fork toOsaka(#869). - โจ Improve
fillterminal output to emphasize that filling tests is not actually testing a client (#807). - โจ Add the
BlockchainTestEnginetest spec type that only generates a fixture in theEngineFixture(blockchain_test_engine) format (#888). - ๐ Move the
evm_transition_toolpackage toethereum_clisand derive the transition tool CL interfaces from a sharedEthereumCLIclass that can be reused for other sub-commands (#894). - โจ Pass
state_testproperty to T8N tools that support it (Only EELS at the time of merge) (#943). - โจ Add the
eofwrapcli used to wrap tests fromethereum/testsin an EOF container (#896). - ๐ Improve gentest architecture with
EthereumTestBaseModelandEthereumTestRootModel(#901). - ๐ Migrate transaction test to
state_testforgentest(#903). - ๐
ethereum_test_forksforks now contain gas-calculating functions, which return the appropriate function to calculate the gas used by a transaction or memory function for the given fork (#779). - ๐ Fix
Bytecodeclass__eq__method (#939). - ๐ Update
pydanticfrom 2.8.2 to 2.9.2 (#960). - โจ Add the
eest make testcommand, an interactive CLI that helps users create a new test module and function (#950). - โจ Add the
eest cleancommand that helps delete generated files and directories from the repository (#980). - โจ Add framework changes for EIP-7742, required for Prague devnet-5 (#931).
- โจ Add the
eest make envcommand that generates a default env file (env.yaml)(#996). - โจ Generate Transaction Test type (#933).
- โจ Add a default location for evm logs (
--evm-dump-dir) when filling tests (#999). - โจ Slow tests now have greater timeout when making a request to the T8N server (#1037).
- โจ Introduce
pytest.mark.parametrize_by_forkhelper marker (#1019, #1057). - ๐ fix(consume): allow absolute paths with
--evm-bin(#1052). - โจ Disable EIP-7742 framework changes for Prague (#1023).
- โจ Allow verification of the transaction receipt on executed test transactions (#1068).
- โจ Modify
valid_at_transition_tomarker to add keyword argumentssubsequent_transitionsanduntilto fill a test using multiple transition forks (#1081). - ๐ fix(consume): use
"HIVE_CHECK_LIVE_PORT"to signal hive to wait for port 8551 (Engine API port) instead of the 8545 port when runningconsume engine(#1095). - โจ
state_test,blockchain_testandblockchain_test_enginefixtures now contain theblobSchedulefrom EIP-7840, only for tests filled for Cancun and Prague forks (#1040). - ๐ Change
--distflag to the default value,load, for better parallelism handling during test filling (#1118). - ๐ Refactor framework code to use the
ethereum-rlppackage instead ofethereum.rlp, previously available in ethereum/execution-specs (#1180). - ๐ Update EELS / execution-specs EEST dependency to 99238233 for EEST framework libraries and test case generation (#1181).
- โจ Add the
consume cachecommand to cache fixtures before running consume commands (#1044). - โจ The
--inputflag of the consume commands now supports parsing of tagged release names in the format<RELEASE_NAME>@<RELEASE_VERSION>(#1044). - ๐ Fix stdout output when using the
fillcommand (#1188). - โจ Add tests for blockchain intermediate state verification (#1075).
- โจ Add Interactive CLI input functionality (#947).
- ๐ Rename
EOFTest.datatoEOFTest.containerwith rebase ofEOFStateTest(#1145). - โจ Turn on
--tracesfor EELS +ethereum-specs-evm-resolver(#1174).
๐ Misc¶
- โจ Feature releases can now include multiple types of fixture tarball files from different releases that start with the same prefix (#736).
- โจ Releases for feature eip7692 now include both Cancun and Prague based tests in the same release, in files
fixtures_eip7692.tar.gzandfixtures_eip7692-prague.tar.gzrespectively (#743). โจ Re-write the test case reference doc flow as a pytest plugin and add pages for test functions with a table providing an overview of their parametrized test cases (#801, #842). - ๐ Simplify Python project configuration and consolidate it into
pyproject.toml(#764). - โจ Add dev docs to help using nectos/act (#776).
- ๐ Update
uv.lockfor updated solc deps (#782). - โจ Enable coverage on any test change (#790).
- ๐ Created
pytest_plugins.concurrencyplugin to sync multiplexdistprocesses without using a command flag to specify the temporary working folder (#824) - ๐ Move pytest plugin
pytest_plugins.filler.solctopytest_plugins.solc.solc(#823). - ๐ Remove
formats.py, embed properties as class vars (#826). - โจ Add
build-evm-baseto docs deploy workflows (#829). - ๐ Add links to the online test case docs in the EOF tracker (#838).
- ๐ Fix miscellaneous improvements to troubleshooting, navigation, styling (#840).
- โจ Include all parameters in test parameter datatables (#842).
- โจ Add info about ripemd160 & update running actions locally (#847).
- โจ Add
SECURITY.mddescribing how to report vulnerabilities (#848). - ๐ Change image from ubuntu-24.04 to ubuntu-latest in CI (#855).
- ๐ Asserts that the deploy docs tags workflow is only triggered for full releases (#857).
- ๐ Fix deploy docs tags workflow trigger (#858).
- โจ A new application-wide configuration manager provides access to environment and application configurations. (#892).
- ๐ Update the developer docs navigation (#898).
- ๐ Use jinja2 templating in
gentest(#900). - โจ Fix/add test github actions locally page (#909).
- ๐ Fix print fill output in coverage workflow on errors (#919).
- ๐ Use a local version of ethereum/execution-specs (EELS) when running the framework tests in CI (#997).
- โจ Use self-hosted runners for fixture building in CI (#1051).
- โจ Release tarballs now contain fixtures filled for all forks, not only the fork under active development and the fork currently deployed on mainnet (#1053).
- โจ
StateTestfixture format now containsstatefield in each network post result, containing the decoded post allocation that results from the transaction execution (#1064). - โจ Include EELS fork resolution information in filled json test fixtures (#1123).
- ๐ Updates ruff from version 0.8.2 to 0.9.4 (#1168).
- ๐ Update
uv.lockto be compatible withuv>=0.5.22(#1178). - ๐ Update
mypyfrom version0.991to1.15(#1209).
๐งช Test Cases¶
- โจ Migrate validation tests
EIP3540/validInvalidFiller.yml(#598). - โจ EIP-4844 test
tests/cancun/eip4844_blobs/test_point_evaluation_precompile.pyincludes an EOF test case (#610). - โจ Example test
tests/frontier/opcodes/test_dup.pynow includes EOF parametrization (#610). - โจ Add EOFv1 function test - Call simple contract test (#695).
- โจ Add section size validation tests (#705).
- โจ Add deep and wide EOF subcontainers tests (#718).
- โจ Update EIP-7702 tests for Devnet-3 (#733)
- โจ Migrate "valid" EOFCREATE validation (#738).
- โจ Migrate tests for truncated sections (#740).
- โจ Add out of order container section test (#741).
- โจ Convert all opcodes validation test
tests/frontier/opcodes/test_all_opcodes.py(#748). - ๐ Add Test types with 128 inputs (#749).
- ๐ Use new marker to EOF-ize MCOPY test (#754).
- โจ Add EOF Tests from Fuzzing (#756).
- โจ Add embedded container tests (#763).
- โจ Validate EOF only opcodes are invalid in legacy (#768).
- โจ Update EOF tracker, add unimplemented tests (#773).
- โจ Add EIP-7620 EOFCREATE gas tests (#785).
- โจ Add more fuzzing discovered EOF tests (#789).
- โจ Add EOF tests for invalid non-returning sections (#794).
- โจ Test to ensure transient storage is cleared after transactions (#798).
- โจ Test that transient storage stays at correct address (#799).
- โจ Add EOFCREATE referencing the same subcontainer twice test (#809).
- โจ Add dangling data in subcontainer test (#812).
- ๐ Fix EIP-7702+EOF tests due to incorrect test expectations and faulty
Conditionaltest generator in EOF mode (#821) - ๐ Fix TSTORE EOF variant test (#831).
- ๐ Unify EOF return code constants (#834).
- โจ Add RJUMP* vs CALLF tests (#833).
- โจ Add tests to clarify "non-returning instruction" (#837).
- โจ Add double RJUMPI stack validation tests (#851).
- โจ Add unreachable code sections tests (#856).
- ๐ฅ
PragueEIP7692fork in tests has been updated toOsaka(#869) - โจ Update EIP-6110, EIP-7002, EIP-7251, EIP-7685, and EIP-7702 tests for Devnet-4 (#832)
- โจ Add EIP-7069 and EIP-7620 failures and context vars tests (#836).
- โจ Add EOF EIP-4750 Stack validation in CALLF test (#889).
- โจ Add stack overflow by rule check to JUMPF tests (#902).
- ๐ Fix erroneous test with
CALLFrule bug (#907). - โจ Add test for EXTDELEGATECALL value cost (#911).
- โจ Add basic EOF execution tests (#912).
- โจ Add parametrized CALLF execution tests (#913).
- โจ Add CALLF execution tests (#914).
- โจ Add fibonacci and factorial CALLF tests (#915).
- โจ Add RJUMP* execution tests (#916).
- โจ EIP-7702 many delegations test (#923)
- โจ Add opcode validation tests (#932).
- โจ Add RJUMPI with JUMPF tests (#928).
- โจ EIP-7702 set code of non-empty-storage account test (#948)
- โจ Add PUSH* opcode tests (#975).
- โจ EIP-7702 implement 7702 test ideas (#981)
- โจ EIP-7702 Remove delegation behavior of EXTCODE* (#984)
- โจ Add EIP-7620 RETURNCONTRACT behavior verification test (#1109).
- โจ Add EIP-7069 p256verify EOF calls tests (#1021).
- โจ Add EIP-7480 DATACOPY edge cases tests (#1020).
- โจ Add EIP-7069 EXTCALL creation gas charge tests (#1025).
- โจ Add generic precompile-absence test (#1036)
- โจ Add test for EIP-2537 which uses the full discount table of G2 MSM (#1038)
- โจ EIP-7691 Blob throughput increase tests by parametrization of existing EIP-4844 tests (#1023, #1082)
- โจ Port calldatacopy test (#1056).
- โจ EIP-7623 Increase calldata cost (#1004, #1071)
- โจ Add CALLF invalid section index tests (#1111).
- โจ Add JUMPF invalid section index tests (#1112).
- โจ Add CALLF truncated immediate bytes tests (#1114).
- โจ EIP-152 Add tests for Blake2 compression function
Fprecompile (#1067) - โจ Add CALLF non-returning section tests (#1126).
- โจ Add DATALOADN truncated immediate bytes tests (#1127).
- ๐ Update EIP-7702 test expectations according to spec updates (#1129)
- โจ Add tests for CALLF and non-returning (#1140).
- ๐ Update EIP-7251 according to spec updates #9127, #9289 (#1024, #1155).
- ๐ Update EIP-7002 according to spec updates #9119, #9288 (#1024, #1155).
- ๐ Update EIP-2935 according to spec updates #9144, #9287 (#1046, #1155)
- โจ Add DATALOADN validation and execution tests (#1162).
- โจ Add EOF prefix tests (#1187).
- โจ Add tests for EOF code header missing (#1193).
- โจ Add tests for empty EOF type section (#1194).
- โจ Add tests for multiple EOF type sections (#1195).
- โจ Add EIP-7698 legacy EOF creation prevention tests (#1206).
v3.0.0 - 2024-07-22¶
๐งช Test Cases¶
- โจ Port create2 return data test (#497).
- โจ Add tests for eof container's section bytes position smart fuzzing (#592).
- โจ Add
test_create_selfdestruct_same_tx_increased_noncewhich tests self-destructing a contract with a nonce > 1 (#478). - โจ Add
test_double_killandtest_recreatewhich test resurrection of accounts killed withSELFDESTRUCT(#488). - โจ Add eof example valid invalid tests from ori, fetch EOF Container implementation (#535).
- โจ Add tests for EIP-2537: Precompile for BLS12-381 curve operations (#499).
- โจ EIP-663: Add
test_dupn.pyandtest_swapn.py(#502). - โจ Add tests for EIP-6110: Supply validator deposits on chain (#530).
- โจ Add tests for EIP-7002: Execution layer triggerable withdrawals (#530).
- โจ Add tests for EIP-7685: General purpose execution layer requests (#530).
- โจ Add tests for EIP-2935: Serve historical block hashes from state (#564, #585).
- โจ Add tests for EIP-4200: EOF - Static relative jumps (#581, #666).
- โจ Add tests for EIP-7069: EOF - Revamped CALL instructions (#595).
- ๐ Fix typos in self-destruct collision test from erroneous pytest parametrization (#608).
- โจ Add tests for EIP-3540: EOF - EVM Object Format v1 (#634, #668).
- ๐ Update EIP-7002 tests to match spec changes in ethereum/execution-apis#549 (#600)
- โจ Convert a few eip1153 tests from ethereum/tests repo into .py (#440).
- โจ Add tests for EIP-7480: EOF - Data section access instructions (#518, #664).
- โจ Add tests for subcontainer kind validation from EIP-7620: EOF Contract Creation for the cases with deeply nested containers and non-first code sections (#676).
- โจ Add tests for runtime stack overflow at CALLF instruction from EIP-4750: EOF - Functions (#678).
- โจ Add tests for runtime stack overflow at JUMPF instruction from EIP-6206: EOF - JUMPF and non-returning functions (#690).
- โจ Add tests for Devnet-1 version of EIP-7702: Set EOA account code (#621)
๐ ๏ธ Framework¶
- ๐ Fix incorrect
!=operator forFixedSizeBytes(#477). - โจ Add Macro enum that represents byte sequence of Op instructions (#457)
- โจ Number of parameters used to call opcodes (to generate bytecode) is now checked (#492).
- โจ Libraries have been refactored to use
pydanticfor type checking in most test types (#486, #501, #508). - โจ Opcodes are now subscriptable and it's used to define the data portion of the opcode:
Op.PUSH1(1) == Op.PUSH1[1] == b"\x60\x01"(#513) - โจ Added EOF fixture format (#512).
- โจ Verify filled EOF fixtures using
evmone-eofparseduringfillexecution (#519). - โจ Added
--tracessupport when running with Hyperledger Besu (#511). - โจ Use pytest's "short" traceback style (
--tb=short) for failure summaries in the test report for more compact terminal output (#542). - โจ The
fillcommand now generates HTML test reports with links to the JSON fixtures and debug information (#537). - โจ Add an Ethereum RPC client class for use with consume commands (#556).
- โจ Add a "slow" pytest marker, in order to be able to limit the filled tests until release (#562).
- โจ Add a CLI tool that generates blockchain tests as Python from a transaction hash (#470, #576).
- โจ Add more Transaction and Block exceptions from existing ethereum/tests repo (#572).
- โจ Add "description" and "url" fields containing test case documentation and a source code permalink to fixtures during
filland use them inconsume-generated Hive test reports (#579). - โจ Add git workflow evmone coverage script for any new lines mentioned in converted_ethereum_tests.txt (#503).
- โจ Add a new covariant marker
with_all_contract_creating_tx_typesthat allows automatic parametrization of a test with all contract-creating transaction types at the current executing fork (#602). - โจ Tests are now encouraged to declare a
pre: Allocparameter to get the pre-allocation object for the test, and usepre.deploy_contractandpre.fund_eoato deploy contracts and fund accounts respectively, instead of declaring thepreas a dictionary or modifying its contents directly (see the state test tutorial for an updated example) (#584). - โจ Enable loading of ethereum/tests/BlockchainTests (#596).
- ๐ Refactor
gentestto useethereum_test_tools.rpc.rpcby adding toget_transaction_by_hash,debug_trace_calltoEthRPC(#568). - โจ Write a properties file to the output directory and enable direct generation of a fixture tarball from
fillvia--output=fixtures.tgz(#627). - ๐
ethereum_test_toolslibrary has been split into multiple libraries (#645). - โจ Add the consume engine simulator and refactor the consume simulator suite (#691).
- ๐ Prevents forcing consume to use stdin as an input when running from hive (#701).
๐ Misc¶
- ๐ Fix CI by using Golang 1.21 in Github Actions to build geth (#484).
- ๐ฅ "Merge" has been renamed to "Paris" in the "network" field of the Blockchain tests, and in the "post" field of the State tests (#480).
- โจ Port entry point scripts to use click and add tests (#483).
- ๐ฅ As part of the pydantic conversion, the fixtures have the following (possibly breaking) changes (#486):
- State test field
transactionnow uses the proper zero-padded hex number format for fieldsmaxPriorityFeePerGas,maxFeePerGas, andmaxFeePerBlobGas - Fixtures' hashes (in the
_infofield) are now calculated by removing the "_info" field entirely instead of it being set to an empty dict.
- State test field
- ๐ Relax minor and patch dependency requirements to avoid conflicting package dependencies (#510).
- ๐ Update all CI actions to use their respective Node.js 20 versions, ahead of their Node.js 16 version deprecations (#527).
- โจ Releases now contain a
fixtures_eip7692.tar.gzwhich contains all EOF fixtures (#573). - โจ Use
solc-selectfor tox when running locally and within CI (#604).
๐ฅ Breaking Change¶
- Cancun is now the latest deployed fork, and the development fork is now Prague (#489).
- Stable fixtures artifact
fixtures.tar.gzhas been renamed tofixtures_stable.tar.gz(#573) - The "Blockchain Test Hive" fixture format has been renamed to "Blockchain Test Engine" and updated to more closely resemble the
engine_newPayloadformat in theexecution-apisspecification (https://github.com/ethereum/execution-apis/blob/main/src/engine/prague.md#request) and now contains a single"params"field instead of multiple fields for each parameter (#687). - Output folder for fixtures has been renamed from "blockchain_tests_hive" to "blockchain_tests_engine" (#687).
v2.1.1 - 2024-03-09¶
๐งช Test Cases¶
- ๐ Dynamic create2 collision from different transactions same block (#430).
- ๐ Fix beacon root contract deployment tests so the account in the pre-alloc is not empty (#425).
- ๐ All beacon root contract tests are now contained in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py, and all state tests have been converted back to blockchain tests format (#449)
๐ ๏ธ Framework¶
-
โจ Adds two
consumecommands #339: -
consume direct- Execute a test fixture directly against a client using ablocktest-like command (currently only geth supported). -
consume rlp- Execute a test fixture in a hive simulator against a client that imports the test's genesis config and blocks as RLP upon startup. This is a re-write of the ethereum/consensus Golang simulator. -
โจ Add Prague to forks (#419).
- โจ Improve handling of the argument passed to
solc --evm-versionwhen compiling Yul code (#418). - ๐ Fix
fill -m yul_testwhich failed to filter tests that are (dynamically) marked as a yul test (#418). - ๐ Helper methods
to_address,to_hashandto_hash_byteshave been deprecated in favor ofAddressandHash, which are automatically detected as opcode parameters and pushed to the stack in the resulting bytecode (#422). - โจ
Opcodesenum now contains docstrings with each opcode description, including parameters and return values, which show up in many development environments (#424) @ThreeHrSleep. - ๐ Locally calculate state root for the genesis blocks in the blockchain tests instead of calling t8n (#450).
- ๐ Fix bug that causes an exception during test collection because the fork parameter contains
None(#452). - โจ The
_infofield in the test fixtures now contains ahashfield, which is the hash of the test fixture, and ahasherscript has been added which prints and performs calculations on top of the hashes of all fixtures (seehasher -h) (#454). - โจ Adds an optional
verify_syncfield to hive blockchain tests (EngineAPI). When set to true a second client attempts to sync to the first client that executed the tests (#431). - ๐ Fix manually setting the gas limit in the genesis test env for post genesis blocks in blockchain tests (#472).
๐ Misc¶
- ๐ Fix deprecation warnings due to outdated config in recommended VS Code project settings (#420).
- ๐ Fix typo in the selfdestruct revert tests module (#421).
v2.1.0 - 2024-01-29: ๐๐๏ธ Cancun¶
Release v2.1.0 primarily fixes a small bug introduced within the previous release where transition forks are used within the new StateTest format. This was highlighted by @chfast within #405 (#405), where the fork name ShanghaiToCancunAtTime15k was found within state tests.
๐งช Test Cases¶
- โจ EIP-4844: Adds
test_blob_gas_subtraction_tx()verifying the blob gas fee is subtracted from the sender before executing the blob tx (#407).
๐ ๏ธ Framework¶
- ๐ State tests generated with transition forks no longer use the transition fork name in the fixture output, instead they use the actual enabled fork according to the state test's block number and timestamp (#406).
๐ Misc¶
- โจ Use
run-paralleland shared wheel packages fortox(#408).
v2.0.0 - 2024-01-25: ๐๐๏ธ Cancun¶
Release v2.0.0 contains many important framework changes, including introduction of the StateTest format, and some additional Cancun and other test coverage.
Due to changes in the framework, there is a breaking change in the directory structure in the release tarball, please see the dedicated "๐ฅ Breaking Changes" section below for more information.
๐งช Test Cases¶
- โจ EIP-4844: Add
test_sufficient_balance_blob_tx()andtest_sufficient_balance_blob_tx_pre_fund_tx()(#379). - โจ EIP-6780: Add a reentrancy suicide revert test (#372).
- โจ EIP-1153: Add
test_run_until_out_of_gas()for transient storage opcodes (#401). - โจ EIP-198: Add tests for the MODEXP precompile (#364).
- โจ Tests for nested
CALLandCALLCODEgas consumption with a positive value transfer (previously lacking coverage) (#371). - ๐ EIP-4844: Fixed
test_invalid_tx_max_fee_per_blob_gas()to account for extra gas required in the case where the account is incorrectly deduced the balance as if it had the correct block blob gas fee (#370). - ๐ EIP-4844: Fixed
test_insufficient_balance_blob_tx()to correctly calculate the minimum balance required for the accounts (#379). - ๐ EIP-4844: Fix and enable
test_invalid_blob_tx_contract_creation(#379). - ๐ Convert all eligible
BlockchainTests toStateTests (and additionally generate correspondingBlockchainTests) (#368, #370).
๐ ๏ธ Framework¶
- โจ Add
StateTestfixture format generation;StateTestsnow generate aStateTestand a correspondingBlockchainTesttest fixture, previously onlyBlockchainTestfixtures were generated (#368). - โจ Add
StateTestOnlyfixture format is now available and its only difference withStateTestis that it does not produce aBlockchainTest(#368). - โจ Add
evm_bytes_to_pythoncommand-line utility which converts EVM bytecode to Python Opcodes (#357). - โจ Fork objects used to write tests can now be compared using the
>,>=,<,<=operators, to check for a fork being newer than, newer than or equal, older than, older than or equal, respectively when compared against other fork (#367). - โจ Add solc 0.8.23 support (#373).
- โจ Add framework unit tests for post state exception verification (#350).
- โจ Add a helper class
ethereum_test_tools.TestParameterGroupto define test parameters as dataclasses and auto-generate test IDs (#364). - โจ Add a
--single-fixture-per-fileflag to generate one fixture JSON file per test case (#331). - ๐ Storage type iterator is now fixed (#369).
- ๐ Fix type coercion in
FixtureHeader.join()(#398). - ๐ Locally calculate the transactions list's root instead of using the one returned by t8n when producing BlockchainTests (#353).
- ๐ Change custom exception classes to dataclasses to improve testability (#386).
- ๐ Update fork name from "Merge" to "Paris" used within the framework and tests (#363).
- ๐ฅ Replace
=with_in pytest node ids and test fixture names (#342). - ๐ฅ The
StateTest, spec format used to write tests, is now limited to a single transaction per test (#361). - ๐ฅ Tests must now use
BlockExceptionandTransactionExceptionto define the expected exception of a given test, which can be used to test whether the client is hitting the proper exception when processing the block or transaction (#384). - ๐ฅ
fill: Remove the--enable-hiveflag; now all test types are generated by default (#358). - ๐ฅ Rename test fixtures names to match the corresponding pytest node ID as generated using
fill(#342).
๐ Misc¶
- โจ Docs: Add a "Consuming Tests" section to the docs, where each test fixture format is described, along with the steps to consume them, and the description of the structures used in each format (#375).
- ๐ Docs: Update
t8ntool branch to fill tests for development features in the readme (#338). - ๐ Filling tool: Updated the default filling tool (
t8n) to go-ethereum@master (#368). - ๐ Docs: Fix error banner in online docs due to mermaid syntax error (#398).
- ๐ Docs: Fix incorrectly formatted nested lists in online doc (#403).
- ๐ CLI:
evm_bytes_to_pythonis renamed toevm_bytesand now accepts flag--assemblyto output the code in assembly format (#844)
๐ฅ Breaking Changes¶
A concrete example of the test name renaming and change in directory structure is provided below.
-
Fixture output, including release tarballs, now contain subdirectories for different test types:
-
blockchain_tests: ContainsBlockchainTestformatted tests blockchain_tests_hive: ContainsBlockchainTestwith Engine API call directives for use in hive-
state_tests: ContainsStateTestformatted tests -
StateTest, spec format used to write tests, is now limited to a single transaction per test. - In this release the pytest node ID is now used for fixture names (previously only the test parameters were used), this should not be breaking. However,
=in both node IDs (and therefore fixture names) have been replaced with_, which may break tooling that depends on the=character. - Produced
blockchain_testsfixtures and their correspondingblockchain_tests_hivefixtures now contain the named exceptionsBlockExceptionandTransactionExceptionas strings in theexpectExceptionandvalidationErrorfields, respectively. These exceptions can be used to test whether the client is hitting the proper exception when processing an invalid block.
Blockchain test:
"blocks": [
{
...
"expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS",
...
}
...
]
Blockchain hive test:
"engineNewPayloads": [
{
...
"validationError": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS",
...
}
...
]
Renaming and Release Tarball Directory Structure Change Example¶
The fixture renaming provides a more consistent naming scheme between the pytest node ID and fixture name and allows the fixture name to be provided directly to pytest 5on the command line to execute individual tests in isolation, e.g. pytest tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier].
-
Pytest node ID example:
-
Previous node ID:
tests/frontier/opcodes/test_dup.py::test_dup[fork=Frontier]. -
New node ID:
tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]. -
Fixture name example:
-
Previous fixture name:
000-fork=Frontier -
New fixture name:
tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier](now the same as the pytest node ID). -
Fixture JSON file name example (within the release tarball):
-
Previous fixture file name:
fixtures/frontier/opcodes/dup/dup.json(BlockChainTestformat). -
New fixture file names (all present within the release tarball):
fixtures/state_tests/frontier/opcodes/dup/dup.json(StateTestformat).fixtures/blockchain_tests/frontier/opcodes/dup/dup.json(BlockChainTestformat).fixtures/blockchain_tests_hive/frontier/opcodes/dup/dup.json(a blockchain test inHiveFixtureformat).
v1.0.6 - 2023-10-19: ๐๐๏ธ Cancun Devnet 10¶
๐งช Test Cases¶
- ๐ EIP-4844: Update KZG point evaluation test vectors to use data from the official KZG setup and Mainnet Trusted Setup (#336).
๐ ๏ธ Framework¶
- ๐ Fixtures: Add a non-RLP format field (
rlp_decoded) to invalid blocks (#322). - ๐ Spec: Refactor state and blockchain spec (#307).
๐ง EVM Tools¶
- โจ Run geth's
evm blocktestcommand to verify JSON fixtures after test case execution (--verify-fixtures) (#325). - โจ Enable tracing support for
ethereum-spec-evm(#289).
๐ Misc¶
- โจ Tooling: Add Python 3.12 support (#309).
- โจ Process: Added a Github pull request template (#308).
- โจ Docs: Changelog updated post release (#321).
- โจ Docs: Add a section explaining execution-spec-tests release artifacts (#334).
- ๐ T8N Tool: Branch used to generate the tests for Cancun is now lightclient/go-ethereum@devnet-10 (#336)
๐ฅ Breaking Change¶
- Fixtures now use the Mainnet Trusted Setup merged on consensus-specs#3521 (#336)
v1.0.5 - 2023-09-26: ๐๐๏ธ Cancun Devnet 9 Release 3¶
This release mainly serves to update the EIP-4788 beacon roots address to 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02, as updated in ethereum/EIPs/pull/7672.
๐งช Test Cases¶
- ๐ EIP-4844: Fix invalid blob txs pre-Cancun engine response (#306).
- โจ EIP-4788: Final update to the beacon root address (#312).
๐ Misc¶
- โจ Docs: Changelog added (#305).
- โจ CI/CD: Run development fork tests in Github Actions (#302).
- โจ CI/CD: Generate test JSON fixtures on push (#303).
๐ฅ Breaking Change¶
Please use development fixtures from now on when testing Cancun. These refer to changes that are currently under development within clients:
- fixtures: All tests until the last stable fork (Shanghai)
- fixtures_develop: All tests until the last development fork (Cancun)
- fixtures_hive: All tests until the last stable fork (Shanghai) in hive format (Engine API directives instead of the usual BlockchainTest format)
- fixtures_develop_hive: All tests until the last development fork (Cancun) in hive format
v1.0.4 - 2023-09-21: ๐ Cancun Devnet 9 Release 2¶
This release adds additional coverage to the current set of Cancun tests, up to the Devnet-9 Cancun specification.
Note: Additional EIP-4788 updates from ethereum/EIPs/pull/7672 will be included in the next release.
๐งช Test Cases¶
- โจ EIP-7516: BLOBBASEFEE opcode: Add first and comprehensive tests (@marioevz in #294).
- โจ EIP-4788: Beacon block root in the EVM: Increase coverage (@spencer-tb in #297).
- ๐ EIP-1153: Transient storage opcodes: Remove conftest '+1153' in network field (@spencer-tb in #299).
๐ ๏ธ Framework¶
- ๐ EIP-4788: Beacon root contract is pre-deployed at
0xbEAC020008aFF7331c0A389CB2AAb67597567d7a(@spencer-tb in #297). - โจ Deprecate empty accounts within framework (@spencer-tb in #300).
- โจ Fixture generation split based on hive specificity (@spencer-tb in #301).
- ๐ฅ
fill:--disable-hiveflag removed; replaced by--enable-hive(@spencer-tb in #301). - โจ Add engine API forkchoice updated information in fixtures (@spencer-tb in #256).
v1.0.3 - 2023-09-14: ๐ Cancun Devnet 9 Release¶
See v1.0.3.
v1.0.2 - 2023-08-11: ๐ Cancun Devnet 8 + 4788 v2 Pre-Release¶
See v1.0.2.
v1.0.1 - 2023-08-03: ๐ Cancun Devnet-8 Pre-Release¶
See v1.0.1.
v1.0.0 - 2023-06-27: ๐งช Welcome to the Pytest Era¶
See v1.0.0.
Older releases can be found on the releases page.